84003;01@n02&.03:T04! 05 /06, J07. v085!$09.!Y010""011&")012/"O013?"~014=#=015*#z016<$$017+$`018E% 0190%P020*&021%&*0224&O023?'024D'B040(041:(042(Y0434(q044')%045)L046.)e047&*048!*9049(*Z050#+051-+%0520+R064,065,,0668,F067,~068- 069$-'070--K071-x072+.073.<074.R075).i076/077*/+078/U079/t08000810+0820G083:0[08431085@1H086E2087/2M0882|0893 0903)09183D092$3|093C4 0110D4c01115'011295F0113>50114!6=011516^0116*70117'79011817`0119<80120-8M01368z013790138!9401399U0140=9k0141:(0142%:A0143:f0144;0160;0161;70162&;P0163;v0164:<01659<K0166:=01677=>01686=u0169/>+0177@>Z0178?0180?-0181"?>0182)?`0183(@ 01845@10185b@f0186(AH0187=Ap0188FB-0189ABs0190$C40196CX01973Cu0198"D(0199;DJ0200=E0201@EB0202F0203;F0205:FZ0206*G0207G>0208G[0209Gx0210H0211H202127HO02137I0214I=0215IR0216&Ie0217!J 0218+J,0219'JW0220J~02214K0222<KK0223L0224.L$0225/LR0226%M0227-M&0228MS0229Me02487N02498N90512(Nq05139O0514=OR0515BP05289PQ0529HQ 0530.QR0531R0532:R05445RR0545+S0546S2E9TVE10FU}E11VCE17qWJE22X;E23YSE41}ZfE51W[cE71\:E84^7E87T` E88``E110bE111.c+E112cYE113e9E116weWE119fNE120gdE139kE165lVE183=p E198>pHE213<qE214IqBE224Qr E225Mr\E226s)E512tE5133vE514xBE515| E516~+E528O'E529vACTIVE APPENDASMSASMxBASEXBRKREGXBRKREGSXBREAKXBREAKSj CALLSTACKjSTACKCICPCOMMANDSCOMMENTSCOMMENT CONSTRUCTSCONTROLBLOCKSuCOUNTmDEFINEmDEF9DIR9 DIRECTORY/ADISPLAYpDOoEDIToEDITORtERRORStERRORtWARNINGtWARNINGS[EVALv EXCEPTIONS7EXIT^?GO^?TIL^?USING^?FOREVER^? EXECUTIONHELPPpIFPpTHENPpORIFPpELSEPpENDIF8@INCLUDE`x INPUTMODE`xIMX INVOCATIONXCRTXMACROXSUBMITXCONTROLSXCRXNOCRXSMXNOSMXMRXNOMRX VSTBUFFERXVSTBr6ISTEP[(KEYS[(EDIT[(FUNCTIONLABELSLINES' LIST' NOLISTC LITERALLYCLITERALYCLITH8LOAD<LSTEP<MACROSEMODIFY!UMODULESe#O NAMESCOPEH,4NOP,|OBJECTS2 OPERATORS2 OP:PATCH:PATCHINGCCPORTCCWPORTGFPROCGFPROCSO PROCEDURESTNPSTEPTNSTEP4^RPUT}g REFERENCE}gQUALIFY}g QUALIFICATIONlREALSo< REGISTERSo<REGSo<FLAGSuREMOVER|REPEAT nRETURNbySTRINGSbySTRINGbySTRLENbyCONCATbySUBSTRbySTRk[TRCREGk[TRCREGSk[TRACEFTYPES{_ VARIABLES{_VARZVIEWix VSTBUFFERaWPORTvWRITEvUSINGType definition record with unrecognizable format. Array's lower bound is unknown - zero is assumed. Symbol is not an array or has fewer dimensions than specified. Size of array elements is not known. Referenced array expects a single character array index. Address of module is not known. Unknown module specified. No line information was loaded for module. No symbol information was loaded for module. Cannot determine module for specified location. [*] Cannot determine current default module. [*] Symbol currently not active. [*] Symbol not known in current context. No symbol information was loaded for program. Attempt to reference a program symbol of an unsupported type. Symbol is not known to be a record and cannot be qualified. Symbol is not a known record field name. Cannot determine offset of field from start of record. [*] Nested symbolic references not permitted. Symbol isn't a pointer variable or its dereference type is unknown. Specified line is not an executable statement. Specified line does not exist in module. Cannot evaluate line reference. [*] Specified type is incompatible with directory. [*] Cannot perform symbol table request. No user program loaded. Tried to REMOVE debugger object declared locally in DO..END block. Workspace exceeded. [*] The name is either undefined or not of the correct type. The name is undefined. The name is already defined with a different type. Parameter outside the body of a PROC. The name is not a PROC. Illegal type specified in DIR DEBUG command. The named object is not a literally. Illegal assignment to register. String too long to perform assignment. Error in debug symbol lookup. [*] No patch defined at the specified location. Attempt to PUT or APPEND a local debug object. I/O error on PUT file. This command is not currently implemented. This command not allowed inside of a compound command. Invalid type. Invalid type conversion. String longer than 254 characters. String too long for numeric conversion. [*] Illegal type in output. Unmatched double quotes in format string. Write list too long. Write data too large. Invalid format string in WRITE command. Output buffer overflow. Invalid floating point value for output. Invalid expression for MTYPE. Invalid boolean operation. Invalid string operation. Invalid pointer operation. Unknown operation. Attempt to assign value to code instead of variable. [*] Attempt to assign illegal value to BASE variable. Cannot use editor if debugger was invoked with SUBMIT control. Not in a procedure or in a procedure with no debug information. [*] The debugger has overflowed its 86 stack. [*] UDI Exception. Literally nesting too deep. Illegal extended integer. Attempt to assign illegal value to INPUTMODE variable. I/O error while loading VIEW file. No data segment information. Program may execute incorrectly. [*] No stack segment information. Program may execute incorrectly. [*] Program cannot be loaded. [*] The 8087 Emulator was not found in the load module. [*] Missing CH8087 option when loading a program with real math. Bad object record in load file. Load file contains absolute load addresses. [*] Load file contains unresolved externals. Support for overlays not implemented. Memory segment request failure during load. [*] Load module contained no starting address information. [*] Divide by zero (operation yields 0 result). Invalid type for arithmetic. Invalid integer operation. Real math is not available. [*] Invalid real number. Attempted real comparison with NAN, +infinity or -infinity. Invalid real operation. Invalid extended integer operation. Illegal numeric constant. Attempt to INCLUDE :CI:. I/O error on INCLUDE file. I/O error on LIST file. I/O error while loading object file. Could not open load file. Error while attempting to open virtual symbol table. [*] Error while attempting to seek in virtual symbol table. Error while attempting to write to virtual symbol table. Error while attempting to close virtual symbol table. Error while attempting to read virtual symbol table. First address is greater than second address. Attempt to use VIEW command while running PSCOPE under SUBMIT. Illegal mnemonic. Illegal number. Unrecognized 8086/8087 mnemonic. Illegal use of indirect addressing. [*] Illegal single line assembler operand. Single line assembler syntax error. See HELP SASM. Memory pointer (eg. BYTE, WORD, etc) without memory operand (eg. number or symbolic reference). Too few operands for this instruction. Illegal operands, both operands appear to reference memory. The types of the operand(s) do not match the mnemonic or each other. One byte relative jump is out of range. Range is -128 to +127. Bad minor number in 8087 function. Expression stack underflow. BASE must be 2T, 10T or 16T. 10T is assumed. [*] Illegal recursive use of editor. Invalid line number record found in virtual symbol table. Anomaly in symbol information in Virtual Symbol Table file. Invalid type information record found in virtual symbol table. Invalid symbol record type. Attempt to reference non-existent type definition record. Attempt to seek beyond end of Virtual Symbol Table file. Unknown size of integer in EVAL command. Fatal Memory Manager Error. Fatal Memory Manager Error. Fatal Memory Manager Error. Fatal Memory Manager Error. Fatal Memory Manager Error. Attempt to seek past end of debugger memory file. [*] Attempt to read past end of debugger memory file. [*] Fatal System Error. Bad minor number. Attempt to execute bad postfix code. Anomaly in mode of PUT command. Anomaly in type of PUT or APPEND command. Attempt to access undefined register. Register name too long. Fatal System Error. Call an INTEL representative. An illegal operand type was detected on the runtime stack. Operand size too large. [*] Unsupported reference to a debug object. [*] Unsupported assignment to a debug object. [*] Bad debug object scope encountered. Error in Help/Error message file directory. Illegal operand. Illegal syntax in CRT file. Insufficient memory for Virtual Symbol Table buffers. The cause of execution break is unknown to PSCOPE. [*] This breakpoint is already active. [*] Invalid return type from PROC called at breakpoint. [*] There was a patch in progress and it was not completed. [*] Attempted recursive definition of a break or trace register. [*] Cannot determine proper statement address for step. [*] No break or trace registers (of the requested type) have been defined. This command cannot occur inside of a PATCH. No program was loaded. Unknown 86 instruction at specified address during STEP. Attempt to restore data where no breakpoint occurs. Anomaly in active breakpoint information. Could not find specified location in any known module. Either specified location is outside of program or in a module for which there is no symbol information. Could not find current location in any known module. Either current execution point is outside of program or in a module for which there is no symbol information. Symbol is either not known or is not local to the current procedure. The debugger was unable to determine the size of one of the preceding record fields, hence the requested field cannot be referenced. Segment part of line reference pointer not known. It may be that no symbol information was loaded for module. Specified type cannot be used with the specified (or default) directory. For example, DIR PUBLIC LINE is contradictory, as there are no public lines. Out of workspace. Delete any unneccessary debugger objects (eg, PROCs, LITERALLYs, PATCHs). This could also arise from deeply recursive PROCs. May be caused by removing a global debug variable referenced in a PROC (or PATCH), and then executing the PROC (or PATCH). In order to convert character strings to unsigned numbers, they must be of length 1. An attempt was made to assign an expression to a location associated with user data (eg, :main.proc1 = 5, where proc1 is a procedure in module main). Straight assignments may only be made to variables or with mtype operators (eg, byte 100:200 = 5). In order for the calling procedure to be identified (and the CALLSTACK command to function properly), the current execution point must be in a procedure, or in a procedure for which there is debug information. The debugger has overflowed its stack - probably due to deep recursion of a PROC. The load module did not provide any information about the data segment. Therefore, execution of the program may have unexpected, and possibly unpleasant results. The load module did not provide any information about the stack segment. Therefore, execution of the program may have unexpected, and possibly unpleasant results. Program start address needs fixup by linker. If the CH8087 option is specified in the load command, then the 8087 Emulator is required to be linked into the program being debugged. It was not found at load, so either it never existed, or it might have been purged. Load file is not PIC or LTL. More memory is needed to load program. Deletion of debugger objects will not increase available memory for loading. The load module did not provide any information about the starting address. The load has been aborted and execution of the program is not possible. In order to use real math (including any operations or reference to real numbers), you must use the CH8087 option on the LOAD command, and have the 8087 emulator linked into the program under debug. This error may be detected if the CH8087 option was used on the LOAD command with a program which appears to have the emulator linked into it but does not (this can happen with Pascal and FORTRAN programs when linked with 87NULL.LIB). The virtual symbol table uses :WORK: for the disk-resident portion of the virtual symbol table. Ensure that the device for :WORK: is ready and that PSCOPE has access rights to it. The correct forms of indirect addressing are: [BX] + offset [BP] + offset [DI] + offset [SI] + offset [BP] [DI] + offset [BP] [SI] + offset [BX] [DI] + offset [BX] [SI] + offset The symbolic reference (of the form :MODLUE.SYMBOL.SYMBOL.etc) and the '+ offset' are optional. The value was detected during the use of the BASE variable. This may be caused by redefining a currently executing PROC. This may be caused by removing a currently executing PROC. An operand whose size is illegally large was detected on runtime stack. An unsupported debug object was detected during an attempt to access its value. An unsupported debug object was detected during an attempt to assign to it. Execution was broken in a manner that PSCOPE cannot determine. It was not via a known breakpoint or a control-c. Probably caused by the user placing an interrupt at the given address or having hit a control-d. You may only activate one breakpoint of each type (break, trace or patch) at any one address. The break originally activated is still intact. The debugger procedure called at the break or trace point returned a value with an invalid type, or had no return value. The return value must be a BYTE, WORD, DWORD, BOOLEAN, or INTEGER (including LONG/SHORT). A return value of TRUE is manufactured, causing the associated break or trace to be done. At the time that execution was interrupted, a code PATCH was being executed. The current execution point is the standard resume address (the point in the program to which control would normally be transfered after the patch), as if the PATCH had completed (unless the PATCH changed it), but the entire PATCH will most likely not have completed execution. If the resume address is the PATCH address, then restarting execution will re-execute the patch. PSCOPE halted execution due to the unexpected setting of the single step trap flag. This could have arisen if a control-c was hit while executing an interrupt routine entered while PSTEPing, LSTEPing or ISTEPing. A subsequent GO command should allow normal execution to continue. An attempt was made to define the named BRKREG or TRCREG while already in the process of defining one. This would happen if an expression in the definition of a break or trace register calls a PROC which defines the named break or trace register. Either, PSCOPE cannot determine the current execution point, and therefore cannot do statement level stepping, or else the user has attempted to begin statement level stepping when the current execution point is not the beginning of a statement. In the latter case, use the GO command to get to a statement, then retry the step. The ACTIVE function will return TRUE if its parameter (a symbolic reference) is active in the current program block or if it is statically allocated, and FALSE otherwise. 'Current program block' is defined by the namescope (normally, the current point of execution). See PUT. The ASM (SASM for I2ICE compatablity) command allows the user to enter 8086/8087/8088 assembler mnemonics and have them converted to machine code. It will support all 8086/8087 mnemonics except the 'ESC' which is included in the 8087 mnemonics. Format of the Single Line Assembler command is: ASM
= '8086/8087 mnemonic'[,'8086/8087 mnemonic'] (SASM) for I2ICE compatability Disassembly is supported using ASM/(SASM) followed by a partition defining the location(s) to be disassembled. Disassembly format is: ASM where may be one of the following:
LENGTH
TO
The BASE command allows you to change and inspect the current default numeric base. The legal values are 2 (binary), 10 (decimal) and 16 (hexadecimal). The syntax is: BASE [ = ] where must be from among those listed above. While it is valid to use any expression to set the BASE variable, it is clearer to use a constant with an explicit suffix to avoid possible confusion of values. If BASE is entered alone the current base is displayed. BRKREGs and TRCREGs are named entities used for logically grouping together several breakpoints and tracepoints, respectively. The standard define/modify/display/remove syntax is used, where the in the DEFINE command is a list of location references (lines, labels, procedures or raw addresses) separated by commas. The syntax for defining BRKREGs (which is identical for TRCREGs) is: DEFINE BRKREG = [, ...] where is: [CALL ] where is one of the following: ( [,...]) and is an expression, which evaluates to a location within the user program. If the CALL option is used, the proc specified will be executed when the is reached. Its return value will be inspected - TRUE will cause the break or trace to occur, and FALSE will continue execution with no break or trace (see GO). The user may inspect the dynamic calling sequence via the CALLSTACK command. The syntax is: CALLSTACK [] where the optional parameter indicates how much of the call stack you wish to see. If is omitted, the entire stack is displayed. The stack is always displayed in reverse order (top element is most recent caller - bottom element is first caller). If is a positive number, the top elements are displayed. If is negative, the bottom elements are displayed. The display consists of the name of the calling routine, plus an offset into it to where the call was made. The CI (console input) function allows the user to input a character from the console. It will read one character, with no line editing, and will return that character, without echoing it to the terminal. These are the commands PSCOPE knows: APPEND ASM/SASM BASE CALLSTACK CI COUNT DEFINE DO DIR EDIT EVAL EXIT FLAGS GO HELP IF INCLUDE ISTEP LIST LOAD LSTEP NAMESCOPE NOLIST PORT PSTEP PUT REMOVE REPEAT RETURN VIEW WPORT WRITE To execute a command, enter it at the keyboard, followed by a carriage return (cr). Several commands may be entered on one line provided they are separated by semi-colons (;). One command may extend over several lines. If the command line does not end with a complete command, PSCOPE will issue a double-asterisk (**) prompt to indicate continuation. The character ampersand (&) may be used at the end of a line, before the carriage return, to indicate that the command is to be continued on the next line. This is particularly useful if one wishes to continue what would otherwise be interpreted as a complete command. Comments may be included anywhere in command lines. A comment is any string of text beginning with /* and ending with */. Comments may continue on consecutive lines without the continuation character '&' and without ending and restarting the comment. The following contol constructs exist in the debugger: DO - END REPEAT - ENDREPEAT COUNT - ENDCOUNT IF - THEN - ELSE - ENDIF For more information on these, see their corresponding HELP sections. A COUNT command defines a block of commands to be executed repeatedly subject to an arbitrary number of exit conditions and limited by an iteration count. These exit conditions can be defined with two commands: WHILE and UNTIL. Execution continues as long as a WHILE condition is satisfied, until an UNTIL condition is satisfied, or until iterations have been completed. The general syntax is as follows: COUNT []* ENDCOUNT where can be a , WHILE or UNTIL . COUNT commands may be nested arbitrarily deeply, depending on available memory. Note that END is a synonym for ENDCOUNT. The user may create debugger objects using the DEFINE command. Examples of such objects are PROCs, BRKREGs and INTEGERs. Given a type, name and optional initial value, an object will be created for use during the debug session, and may used anywhere a value of that type is expected. The syntax of the DEFINE command is: DEFINE [GLOBAL] [ = ] where is any valid type indicator (eg, LITERALLY, POINTER, PROC). Some types require an initial value. These are BRKREG/TRCREG, PATCH, LITERALLY and PROC. For all other types, the initial value is optional. If no initial value is given, the object will have a null initial value (zero for numbers, blank for strings). Use of the GLOBAL option when defining an object inside a block will make the object defined globally, that is, not just within that block. The DIR command allows the user to get a directory of debugger objects or program objects, optionally restricting type and scope. The syntax is as follows: DIR [] [] where is either a program module name, DEBUG or PUBLIC, and is from among the following: (program types) ARRAY, ENUMERATION, LABEL, LINE, MODULE, RECORD, SET (debugger types) BRKREG, LITERALLY, PATCH, PROC, TRCREG (both types) ADDRESS, BOOLEAN, BYTE, CHAR, DWORD, EXTINT, INTEGER, LONGINT, LONGREAL, REAL, SELECTOR, SHORTINT, TEMPREAL, WORD If no is specified then the current program module is used. If no is specified, then objects of all types in the specified directory are listed. To display the value of a user-defined debugger object simply type the name of the object. For debugger types (PROC's, LITERALLYs, BRKREGs, TRCREGs and PATCHes) the name must be prefaced by the type. For example: *define brkreg b = :main.proc1, :main#10 *brkreg b define brkreg B = :main.proc1, :main#10 Note that signed types (INTEGER, LONGINT, etc.) are always displayed with a prefix sign (+ or -), and that pointers are displayed in hexadecimal, in the following format: ssssH:ooooH where ssss is the segment and oooo is the offset. The DO - END block is a means of treating a group of commands as a single command. The syntax is as follows: DO []* END Debugger objects defined in a block (with the exception of BRKREGs, TRCREGs, PATCHs, PROCs and LITERALLYs) are local to that block unless defined with the GLOBAL option, and hide any previously defined objects of the same name. DO commands may be nested arbitrarily deeply, depending on available memory. Note that each DO must be matched with an END for it to be considered a complete command. Thus the debugger will keep prompting until the compound command is complete. There are two ways to use the internal editor: explicitly, via the EDIT command, or implicitly, by the ESC key. Striking the ESC key will cause the current command (or last command if there is no current command) to be displayed for editing. The EDIT command syntax is as follows: EDIT /* edits 's definition (a debug object) */ EDIT GO /* edit the last non-trivial GO command */ EDIT PATCH /* edit the defn of the PATCH at */ To get an extended description of an error or warning, type HELP En, where n is the given error number. Errors and warnings which have additional information have messages which are followed by a bracketed asterisk (ie, [*]). The EVAL command has 4 forms: EVAL ; evaluate expression in 3 bases and ASCII EVAL LINE ; evaluate expression as line # + offset EVAL PROCEDURE ; evaluate expression as procedure + offset EVAL SYMBOL [ALL] ; evaluate expression as program symbol + offset For the basic EVAL form, integers display in all three bases and a string of hex bytes. Reals display only as a series of hex bytes. The low order hex byte is displayed first. If the ALL option is used in EVAL SYMBOL [ALL] all symbols that have the exact address specified by the expression will be listed. Note that this completely searches PSCOPE's Virtual Symbol Table; therefore, it is slow and should be used only when needed. PSCOPE automatically traps exception conditions within the user program. The exceptions trapped are from UTS and also include DQEXIT. Unlike standard user breakpoints, these exceptions are always active, removed (and replaced) only by the LOAD command. A trap at DQEXIT is also set to allow the user to inspect variables, and continue normal debugging, except that continued execution of the user program is not possible without reLOADing (see the LOAD command). That is, a GO after hitting DQEXIT will exit PSCOPE. This therefore also provides a good opportunity to save definitions of debugger objects, such as PATCHes, PROCs and BRKREGs that you may want to use in future debug sessions. To exit the debugger, type EXIT, followed by a carriage return. This will print a termination message, end the debug session, close all files (debugger's and user's), return all allocated memory (debugger's and user's) and return to the host operating system. Program execution is controlled via the GO command. The forms are: GO FOREVER GO []* where the optional is a combination of TIL USING If no is used, execution continues with the same set of break or trace points set as on the last GO command (with the exception of any BRKREGs or TRCREGs that were removed or redefined). If the USING clause is used, the break or trace points defined in the break or trace registers listed in the , separated by commas, are activated during this execution. In addition, the keywords BRKREG and TRCREG may be used to activate all break or trace registers, respectively. IF the TIL clause is used, the break points listed in the , separated by commas, are activated for this execution. These may be labels, lines, procedures or raw addresses (in which case PSCOPE assumes the user knows a VALID break address). Specifying FOREVER initiates execution without any breakpoints. Note that a control-c may always be used to interrupt execution, but it may not stop at a known location, so caution is advised. Note that breakpoints (and tracepoints) are only active during execution with the GO command. They are automatically deactivated when control returns to PSCOPE, and will not be active until the next GO command. In particular, they are not activated with the PSTEP/LSTEP/ISTEP commands. When the LOAD command is invoked, all breakpoints are deactivated, and all break and trace registers are removed (even if it is an unsuccessful load - see LOAD). Help information on particular topics may be obtained by typing HELP . Type just HELP to list all available topics. Some abbreviations and synonyms are available, although they may not be listed. To get additional information on some error and warning messages, type HELP En, where n is the error or warning number (see ERRORS). Note that long messages can be stopped and restarted by typing control-s and control-q, and aborted by typing control-c. The IF command allows for conditional execution of commands. The syntax is as follows: IF THEN []* [ ORIF THEN []* ]* [ ELSE []* ] ENDIF The IF command may be nested arbitrarily deeply, depending on available memory. Note that END is a synonym for ENDIF. The INCLUDE command allows the user to specify an alternate source for command input (other than the console). Commands are taken from the specified file until the end of file, at which point input continues from the previous source. The INCLUDE command may be nested arbitrarily deeply, depending on available memory. The syntax of the INCLUDE command is as follows: INCLUDE [NOLIST] If the NOLIST option is used, the INCLUDEd commands will not be echoed to the console. INCLUDE commands must be the last command on a command line. INPUTMODE is a way of informing PSCOPE which DQ$SPECIAL mode the user program is using. Just before restarting user program execution, one can set the INPUTMODE value. PSCOPE will now set the DQ$SPECIAL mode to the INPUTMODE value. The initial default is 2. The usage is as follows: *inputmode = 3 *inputmode 3 There are 4 controls which can be specified (only) at invocation. They are listed with the default value first, and the abbreviations following in brackets: CRT/NOCRT [CR/NOCR] MACRO/NOMACRO [MR/NOMR] NOSUBMIT/SUBMIT [NOSM/SM] VSTBUFFER() [VSTB] In the case of CRT and MACRO, a filename may be included by enclosing it in parentheses after the control, in which case that file must exist, and will be used as the crt or macro file. The default values are .CRT and .MAC, where is the name of the debugger (ie, the name can be changed, but it also changes the default filenames). The SUBMIT control instructs the debugger to use standard line editing, and to disallow use of the internal editor. The VSTBUFFER option specifies the memory size of the virtual symbol table buffer. If no size is specified a default value of 5 kilobytes is used. The minimum size for VSTB is 5 (kilobytes) and the maximum size is 61 (kilobytes). The ISTEP command single steps by machine-level instruction and returns a disassembly of the next instruction. There are several keys which have special functions. Among them are: arrows left/right arrow keys move cursor one character to the left/right ctl-a delete line right of, and including, the cursor ctl-c cancel current command or interrupt program execution ctl-e re-execute the last command ctl-f delete character at the cursor ctl-x delete line left of the cursor ctl-z delete line ESCape enter the editor Home moves cursor to left/right end of line after left/right arrow keys rubout delete character to left of the cursor The debugger recognizes labels within the user program. A label reference is made by using the label name. In the case of numeric labels, such as those in Pascal and FORTRAN, the label must be prefixed with an at-sign (@). For example, label LOOP in procedure PARSE of module PLM_MAIN would be referenced as such: :plm_main.parse.loop (fully qualified) loop (partially qualified) while label 999 in module PAS_MAIN would be reference in the following way: :pas_main.@999 (fully qualified) @999 (partially qualified) Note that a label is treated as a program variable, thereby requiring the '.' in qualification, unlike a line number (see LINES). The value of a label is its address. The debugger recognizes line numbers (called "statements" in the program listing) within the user program. A line number reference is made by prefixing a pound-sign (#) to the line number. For example, line 17 in module MAIN would be referenced as such: :MAIN#17 (fully qualified) #17 (partially qualified) To be recognized as a line number, the pound-sign is always required. Note that a fully qualified line number reference does not use a dot after the module name. The value of a line number is its address. The LIST command may be used to copy all debugger console output (including prompts, input line echos, responses and error messages) to the specified file. Note that program output will NOT be copied to the file. The NOLIST command closes the list file. Changing the current list file also closes the old file. The syntax of the LIST & NOLIST commands is: LIST [] NOLIST If no is specified in the LIST command, the name of the current list file is displayed. If no list file exists, a message is printed. LITERALLYs allow you to associate a string of text with a name. The most frequent use of LITERALLYs is to abbreviate common keywords (eg, BR for BRKREG, LIT for LITERALLY), although the text may be more general, encompassing several commands. To define a LITERALLY: DEFINE LITERALLY = To use a LITERALLY, simply use its name in a command. For example: *define literally L = 'literally' *define L DPROC = 'define proc' *DPROC greet = write 'hello' The LOAD command loads executable object files, with options for selectively loading debug information and giving a command line to the loaded program. The syntax for the LOAD command is as follows: LOAD [