Trailing-Edge
-
PDP-10 Archives
-
bb-r775d-bm_tops20_ks_upd_4
-
sources/edtreq.req
There are 11 other files named edtreq.req in the archive. Click here to see a list.
!+
! This file, EDT.REQ, contains definitions for EDT.
!****************************************************************************
!* *
!* COPYRIGHT (c) 1984, 1985 *
!* BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. *
!* ALL RIGHTS RESERVED. *
!* *
!* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED *
!* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE *
!* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER *
!* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY *
!* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY *
!* TRANSFERRED. *
!* *
!* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE *
!* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT *
!* CORPORATION. *
!* *
!* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS *
!* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. *
!* *
!****************************************************************************
!
! Edit history:
!
! 1-001 - Beginning of edit history.
! 1-002 - Add ASSERT macro, remove bugcheck codes. JBS 01-Jun-1981
! 1-003 - Offset the PDP-11 error codes, so they can be distinguished
! from system-specific error codes. JBS 16-Jul-1981
! 1-004 - Remove the error messages, putting them in
! ERRMSG.REQ. JBS 20-Jul-1981
! 1-005 - Add two fields to TBCB ; one points to the previous buffer,
! the other marks the buffer as a macro. Delete
! the creation of the MAC_BLOCK structure TMV 6-Aug-81
! 1-006 - Add the verb number for the new bell verb. STS 10-Aug-1981
! 1-007 - Add INP_JOURNAL and INP_COMMAND to replace INP_FILE. This
! lets us journal the responses to SUBSTITUTE/QUERY in
! the journal file. JBS 16-Aug-1981
! 1-008 - Add the verb number for the new day/time verb. STS 31-Aug-1981
! 1-009 - Update the routine and variable names. JBS & TMV 16-Aep-1981
! 1-010 - Add new verbs to set up default verb. STS 21-Sep-1981
! 1-011 - Add new verbs for delete select and toggle select. STS 23-Sep-1981
! 1-012 - Add new search and select verb. STS 24-Sep-1981
! 1-013 - Add literals for word and para types. STS 23-Oct-1981
! 1-014 - Add PREV_RANGE. JBS 02-Nov-1981
! 1-015 - Add definitions for file i/o codes and streams. STS 08-Dec-1981
! 1-016 - Change edt$$k to edt$k for file i/o definitions. STS 09-Dec-1981
! 1-017 - Add macro to set up address and length in string desc. STS 11-Jan-1982
! 1-036 - Fix above macro to work with 11's. STS 13-Jan-1982
! 1-019 - Add literals for open output seq and open output noseq. STS 13-Jan-1982
! 1-020 - Chang string_desc macro for bliss16. STS 15-Jan-1982
! 1-021 - Change 32-bit arithmetic to 48-bit arithmetic. SMB 15-Jan-1982
! 1-022 - Modify block allocation so that odd address traps don't occur on 11's. SMB 25-Jan-1982
! 1-023 - Remove original line numbers. SMB 29-Jan-1982
! 1-024 - Make callable literals global. STS 08-Mar-1982
! 1-025 - Remove callable literals. STS 08-Mar-1982
! 1-026 - Add symbols for control C handling. JBS 24-May-1982
! 1-027 - Change VMS multiply. SMB 25-May-1982
! 1-028 - Add FMT_BUFLEN. JBS 05-Jul-1982
! 1-029 - Add verb for xlate. STS 13-Aug-1982
! 1-030 - Remove the keypad definitions to KEYPADDEF.REQ. JBS 13-Aug-1982
! 1-031 - Add ASC_K_CSI, for 8-bit keyboards. JBS 17-Aug-1982
! 1-032 - Add ASC_K_SS3, for 8-bit keyboards. JBS 20-Aug-1982
! 1-033 - Add verb_k_clss. STS 26-Aug-1982
! 1-034 - Add K_RDAHED_LEN. JBS 31-Aug-1982
! 1-035 - Add new screen data structures. SMB 11-Sep-1982
! 1-036 - Put back a line that was deleted by mistake. SMB 15-Sep-1982
! 1-037 - Revise the EDIT section of the new screen data structures. JBS 17-Sep-1982
! 1-038 - Add CC_RDCNT. JBS 17-Sep-1982
! 1-039 - Remove CC_RDCNT. STS 20-Sep-1982
! 1-040 - Work on conditionalizing addline macro for speed. STS 30-Sep-1982
! 1-041 - Add memory allocation maximum. SMB 18-Oct-1982
! 1-042 - Add macros for comparing line numbers. STS 20-Oct-1982
! 1-043 - Work on 11-version of compare macro. STS 21-Oct-1982
! 1-044 - Bind high word of linenumbers in compare macro. STS 21-Oct-1982
! 1-045 - Fix bug in compare. STS 22-Oct-1982
! 1-046 - Work on 11 version of compare macro. STS 26-Oct-1982
! 1-047 - Change 11 compare to call EDT$$CMP_LNO. STS 27-Oct-1982
! 1-048 - Add SCR_EDIT_MINPOS, remove a bunch of unused and obsolete definitions. JBS 27-Oct-1982
! 1-049 - Reduce the size of the screen edit area on the PDP-11. This saves
! space at the expense of time. JBS 15-Nov-1982
! 1-050 - Remove the edit buffer entirely. JBS 27-Dec-1982
! 1-051 - Reduce the amount of code generated by the ASSERT macro, to try
! to save space on the PDP-11. JBS 16-Jan-1983
! 1-052 - Correct the definition of SS3. JBS 19-Jan-1983
! 1-053 - Change the format buffer size for VMS. SMB 24-Feb-1983
!
! 3-001 - Start of modifications for Tops10/20. CG 15-Nov-82
! 3-002 - Use XPORT $FIELD for field definitions.
! 3-003 - Redefine TBCB fields and various macros under BLISS36 conditionals. GB 12-Dec-82
! 3-004 - Add STRING_9 macro for 9-bit strings. CJG 3-Jun-1983
! 3-005 - Change journal constants. CJG 17-Jun-1983
! 3-006 - Change the way that filespecs are handled. CJG 22-Jun-1983
! 3-007 - Add COM_PUSH for PUSH command. CJG 20-Sep-1983
! 3-008 - Fix TBCB layout to stop consistency checks on very large files. CJG 11-Oct-1983
! 3-009 - Make the internal read-ahead buffer the same length as the system
! buffer to prevent data corruption. CJG 21-Dec-1983
! 3-010 - Modify ASSERT macro to include an error code. CJG 30-Jan-1984
!--
!+
! DEFINITION DEFINITIONS
! ~~~~~~~~~~~~~~~~~~~~~~
!
! The following definitions are used to facilitate further definitions.
!-
!+
! Field definition macros. This set of macros allows for definitions
! of the fields of data structures, letting the compiler compute the
! the offsets.
!-
LIBRARY 'BLI:XPORT';
COMPILETIME FIELD_OFFSET = 0;
! Macro to copy a lump of memory
MACRO EDT$$CPY_MEM (LEN, SRCPTR, DSTPTR) = BEGIN EXTERNAL ROUTINE CPYMEM;
CPYMEM (LEN, SRCPTR, DSTPTR) END %;
! Macro to copy a string
MACRO EDT$$CPY_STR (LEN, SRCPTR, DSTPTR) = BEGIN EXTERNAL ROUTINE CPYSTR;
CPYSTR (LEN, SRCPTR, DSTPTR) END %;
!+
! IMPLEMENTATION PARAMETERS.
!
! The following definitions are parameters used in the work-file system
! which may require re-definition for different implementations.
!-
LITERAL
WF_BLN_LEN = 18,
LINE_NUM_LEN = 18, ! Bit length of a line number. (actually 3*18=54)
WC_K_NUM_BUKT = 2;
!+
! TBCB DEFINITION
! ~~~~~~~~~~~~~~~
!
! The EDT work file can contain multiple, independent data sets
! referred to as Text Buffers. A text buffer corresponds to the construct
! of the same name found in EDT user documentation, it is a seqential file
! of variable length records. The records are grouped together into blocks
! of 512 characters. The records in a block are sequentially ordered,
! though the blocks themselves are not. Each block contains a two-byte
! link to the previous and following blocks. In addition to the lines in
! the work-file, an input file may be associated with a text buffer. In this
! case the input file is logically placed at the end of the text buffer.
! The Text buffer is accessed via a control block called the Text Buffer
! Control Block, or TBCB.
!-
$FIELD
TBCB_FIELDS =
SET
TBCB_LINE_ADDR = [$POINTER], ! Pointer to current line.
TBCB_CUR_BUKT = [$SHORT_INTEGER], ! Current bucket number.
TBCB_CUR_PAD = [$SHORT_INTEGER], ! Pad to make line number word aligned for arithmetic routines
TBCB_CUR_LIN = [$SHORT_INTEGER], ! Current line number.
TBCB_CUR_LINM = [$SHORT_INTEGER],
TBCB_CUR_LINH = [$SHORT_INTEGER],
TBCB_CHAR_POS = [$SHORT_INTEGER], ! The character position within the line
TBCB_FIRST_BUKT = [$SHORT_INTEGER], ! First bucket number.
TBCB_LAST_BUKT = [$SHORT_INTEGER], ! Last bucket number.
TBCB_INPUT_LINE = [$SHORT_INTEGER], ! Number of last input line.
TBCB_INPUT_LINM = [$SHORT_INTEGER],
TBCB_INPUT_LINH = [$SHORT_INTEGER],
TBCB_LINE_COUNT = [$INTEGER], ! Count of lines in buffer.
TBCB_LC_M = [$SHORT_INTEGER],
TBCB_LC_H = [$SHORT_INTEGER],
TBCB_CHAR_COUNT = [$INTEGER], ! Count of chars in buffer.
TBCB_INPUT_RAB = [$ADDRESS], ! Pointer to input RAB.
! Not a pointer on TOPS but used
! to indicate if file is still open
TBCB_PREV_BUF = [$POINTER], ! Pointer to previous buffer
TBCB_NEXT_BUF = [$POINTER], ! Pointer to next text buffer.
TBCB_IS_MAC = [$POINTER], ! Buffer is a macro
TBCB_NAME_LEN = [$SHORT_INTEGER], ! Length of buffer name.
TBCB_FILL_NAME = [$SHORT_INTEGER], ! Name filler
TBCB_NAME = [$STRING(0)] ! Name of buffer
TES ;
LITERAL
TBCB_SIZE = $FIELD_SET_SIZE;
MACRO TBCB_BLOCK = BLOCK[TBCB_SIZE] FIELD(TBCB_FIELDS)% ;
!+
! The pos block is the portion of the TBCB which contains information needed
! to locate the current line. This block must be identical to the first
! part of the TBCB or everything will fail.
!-
$FIELD
POS_FIELDS =
SET
POS_LINE_ADDR = [$POINTER], ! Pointer to current line.
POS_CUR_BUKT = [$SHORT_INTEGER], ! Current bucket number.
POS_CUR_PAD = [$SHORT_INTEGER], ! Pad to make line number word aligned for arithmetic.
POS_CUR_LIN = [$SHORT_INTEGER], ! Current line number.
POS_CUR_LINM = [$SHORT_INTEGER],
POS_CUR_LINH = [$SHORT_INTEGER],
POS_CHAR_POS = [$SHORT_INTEGER]
TES ;
LITERAL
POS_SIZE = $FIELD_SET_SIZE; ! Define size of position information
MACRO POS_BLOCK = BLOCK[POS_SIZE] FIELD(POS_FIELDS)%;
!+
! TEXT LINE DEFINITIONS
!
! A line number contains an integer part and a fractional part.
!-
$FIELD
LIN_FIELDS =
SET
LIN_LENGTH = [$SHORT_INTEGER], ! Length of line
LIN_NEXT = [$SHORT_INTEGER], ! Offset to next line in buffer
LIN_NUM = [$SHORT_INTEGER], ! The line number
LIN_NUMM = [$SHORT_INTEGER],
LIN_NUMH = [$SHORT_INTEGER],
LIN_PAD2 = [$SHORT_INTEGER],
LIN_TEXT = [$STRING(0)] ! The actual text
TES ;
LITERAL
LIN_FIXED_SIZE = $FIELD_SET_SIZE;
MACRO LIN_BLOCK = BLOCK[LIN_FIXED_SIZE] FIELD(LIN_FIELDS)%;
!+
! WORK-FILE BUCKET DEFINITIONS
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
! The work file is orgainized into blocks of WF_BLOCK_SIZE characters.
! Each Text Buffer in the work file consists of a linked list of blocks.
!-
LITERAL WF_BUKT_SIZE = 512; ! Size of a work-file block (in words)
LITERAL BYTES_PER_WORD = 5; ! Number of bytes in a word
LITERAL BYTE_SIZE = 7; ! Size of a byte (in text buffer)
$FIELD
WFB_FIELDS =
SET
WFB_PREV_BUKT = [$SHORT_INTEGER], ! Number of previous bucket
WFB_NEXT_BUKT = [$SHORT_INTEGER], ! Number of next bucket
WFB_END = [$POINTER], ! Offset to last record in block
WFB_RECORDS = [$POINTER] ! Address of first record in block
TES ;
LITERAL
WFB_FIXED_SIZE = $FIELD_SET_SIZE;
!+
! LINE NUMBER BLOCK DEFINITIONS
!
! The line number is defined as a block, so it can be handled as
! one word and one half word.
!-
$FIELD
LN_FIELDS =
SET
LN_LO = [$SHORT_INTEGER],
LN_MD = [$SHORT_INTEGER],
LN_HI = [$SHORT_INTEGER]
TES;
LITERAL
LN_SIZE = $FIELD_SET_SIZE;
MACRO LN_BLOCK = BLOCK [LN_SIZE] FIELD(LN_FIELDS) %;
STRUCTURE
LNOVECTOR[I;N] = [N*LN_SIZE] (LNOVECTOR+I*LN_SIZE);
!+
! Semantic node definitions.
!
! The following defines the structures created by the EDT
! command parser semantic routines. These structures form
! a tree-like representation of the command.
!
! The fields which are grouped together are re-definitions of the
! same slot for use in different types of nodes.
!-
FIELD NODE_FIELDS =
SET
NODE_TYPE = [0,0,18,0], ! Identifies the type of node
COM_NUM = [0,18,18,0], ! Identifies the command
RAN_TYPE = [0,18,18,0], ! Identifier type of range
OP_TYPE = [0,18,18,0], ! Identifies type of operand
SEQ_VAL = [0,18,18,0], ! Did the seq switch have value.
RANGE1 = [%UPVAL,0,%BPVAL,0], ! First range specifier
RAN_VAL = [%UPVAL,0,%BPVAL,0], ! Value for range specifier
SW_BITS = [%UPVAL,0,%BPVAL,0], ! Bits for each possible switch
SRCHADDR = [%UPVAL,0,%BPVAL,0], ! Address of search string
SET_TYPE = [%UPVAL,0,%BPVAL,0], ! Which type of set command
LEFT_OP = [%UPVAL,0,%BPVAL,0], ! Left operand for binary ops
OP_LEN = [%UPVAL,0,%BPVAL,0], ! operand length for op nodes.
OP_VAL = [%UPVAL,0,%BPVAL,0], ! Operand value for numerics.
COM_EXPR = [%UPVAL,0,%BPVAL,0], ! Expression pointer for LET
OP_LEFTOP = [%UPVAL,0,%BPVAL,0], ! Left operand for operators.
SUB_BASE = [%UPVAL,0,%BPVAL,0], ! Substring base string.
RANGE2 = [%UPVAL*2,0,%BPVAL,0], ! Second range specifier
SUB_RANGE = [%UPVAL*2,0,%BPVAL,0], ! Pointer to range for ranges
STR_PNT = [%UPVAL*2,0,%BPVAL,0], ! Pointer to a search string
SRCHLEN = [%UPVAL*2,0,%BPVAL,0], ! Search string length
FILSPEC = [%UPVAL*2,0,%BPVAL,0], ! File specification address
SW_VAL1 = [%UPVAL*2,0,%BPVAL,0], ! First value for switches
AS_STR = [%UPVAL*2,0,%BPVAL,0], ! Addr of string for AS
RIGHT_OP = [%UPVAL*2,0,%BPVAL,0], ! Right operand for binary ops.
BUF_NAME = [%UPVAL*2,0,%BPVAL,0], ! Address of buffer name
OP_ADDR = [%UPVAL*2,0,%BPVAL,0], ! Operand address for op nodes.
COM_VARBL = [%UPVAL*2,0,%BPVAL,0], ! Variable pointer for LET
OP_RIGHTOP = [%UPVAL*2,0,%BPVAL,0], ! Right operand for operators.
SUB_START = [%UPVAL*2,0,%BPVAL,0], ! Substring start pos.
TAB_COUNT = [%UPVAL*2,0,%BPVAL,0], ! Count for tabs adjust.
SET_VAL1 = [%UPVAL*3,0,%BPVAL,0], ! Value for set command
REPADDR = [%UPVAL*3,0,%BPVAL,0], ! Replace string address
FSPCLEN = [%UPVAL*3,0,%BPVAL,0], ! File spec length
AS_LEN = [%UPVAL*3,0,%BPVAL,0], ! Length of string for AS
BUF_LEN = [%UPVAL*3,0,%BPVAL,0], ! length of buffer name
SUB_LENGTH = [%UPVAL*3,0,%BPVAL,0], ! Substring length.
NEXT_COM = [%UPVAL*4,0,%BPVAL,0], ! Pointer to next command
NEXT_RANGE = [%UPVAL*4,0,%BPVAL,0], ! Pointer to next range
REPLEN = [%UPVAL*4,0,%BPVAL,0], ! Replace string length
SET_VAL = [%UPVAL*4,0,%BPVAL,0],
KEY_VAL = [%UPVAL*4,0,%BPVAL,0], ! Number of key for def key
PREV_RANGE = [%UPVAL*5,0,%BPVAL,0], ! Reverse of NEXT_RANGE
SWITS = [%UPVAL*5,0,%BPVAL,0], ! Switch block pointer
SW_VAL2 = [%UPVAL*5,0,%BPVAL,0], ! Second switch value
SW_OVR1 = [%UPVAL*6,0,%BPVAL,0], ! Part of second switch value
SW_OVR2 = [%UPVAL*7,0,%BPVAL,0] ! Part of second switch value
TES;
LITERAL
NUM_NODES = 20, ! Number of semantic nodes
NODE_SIZE = 8*%UPVAL; ! Size of semantic node
LITERAL ! Node type equates
COM_NODE = 1, ! Command node
RANGE_NODE = 2, ! Range node
STR_NODE = 3, ! SUBSTITUTE strings
SW_NODE = 4, ! Option switch value
OP_NODE = 5; ! Expression operand
MACRO NODE_BLOCK = BLOCK[NODE_SIZE] FIELD(NODE_FIELDS) %;
!+
! ASCII CHARACTER DEFINITIONS
!
! Commonly used non-printing ASCII characters.
!-
LITERAL
ASC_K_BS = %O'10',
ASC_K_TAB = %O'11',
ASC_K_LF = %O'12',
ASC_K_CTRL_K= %O'13',
ASC_K_FF = %O'14',
ASC_K_CR = %O'15',
ASC_K_SO = %O'16',
ASC_K_SI = %O'17',
ASC_K_CTRL_U= %O'25',
ASC_K_CTRL_Z= %O'32',
ASC_K_ESC = %O'33',
ASC_K_SP = %O'40',
ASC_K_DEL = %O'177',
ASC_K_CSI = ASC_K_ESC + %X'80',
ASC_K_SS3 = ASC_K_SI + %X'80';
!+
! COMMAND NUMBER DEFINITIONS
!
! The following values are used in a command type node to specify which
! command it is.
!-
LITERAL
COM_NULL = 0,
COM_CHANGE = 1,
COM_COPY = 2,
COM_DEFINE = 3,
COM_DELETE = 4,
COM_EXIT = 5,
COM_FIND = 6,
COM_INCLUDE = 7,
COM_INSERT = 8,
COM_MOVE = 9,
COM_PRINT = 10,
COM_QUIT = 11,
COM_REPLACE = 12,
COM_RESEQ = 13,
COM_SET = 14,
COM_SHOW = 15,
COM_SUBS = 16,
COM_TYPE = 17,
COM_WRITE = 18,
COM_SUBS_NEXT=19,
COM_HELP = 20,
COM_CLEAR = 21,
COM_TADJ = 22,
COM_FILL = 23,
COM_DEF_MAC = 24,
COM_MAC_CALL= 25,
COM_PUSH = 26,
COM_TRACE = 27,
COM_XDDT = 28,
! COM_VERIFY = ?,
LAST_COM = 28;
!+
! RANGE TYPE DEFINITIONS
!
! The following constants are used in range nodes to specify the type of
! range.
!-
LITERAL
RAN_NULL = 0,
RAN_NUMBER = 1,
RAN_DOT = 2,
RAN_STR = 3,
RAN_BEGIN = 4,
RAN_END = 5,
RAN_ORIG = 6,
RAN_PATTERN = 7,
RAN_LAST = 8,
RAN_BEFORE = 9,
RAN_REST = 10,
RAN_WHOLE = 11,
RAN_SELECT = 12,
RAN_BUFFER = 13,
RAN_PLUS = 14,
RAN_MINUS = 15,
RAN_FOR = 16,
RAN_THRU = 17,
RAN_MINSTR = 18,
RAN_ALL = 19,
RAN_AND = 20,
NUM_RAN = 20, ! Total number of ranges
NUM_SLR = 7; ! number of single line ranges
!
! Operand types for operand nodes.
!
LITERAL
OP_STRING = 0, ! Operand is a quoted string
OP_NUM = 1, ! Operand is a number
OP_VAR = 2, ! Operand is a variable
OP_DOT = 3, ! Operand is the dot pseudo variable
OP_ADD = 4, ! Operand is an addition operator
OP_SUB = 5, ! Operand is a subtractions operator
OP_MULT = 6, ! Operand is a multiplication operator
OP_DIV = 7, ! Operand is a division operator
OP_AND = 8, ! logical and
OP_OR = 9, ! logical or
OP_LSS = 10, ! compare for less
OP_LEQ = 11, ! compare for less or equal
OP_EQL = 12, ! Compare for equality
OP_GEQ = 13, ! compare for greater or equal
OP_GTR = 14, ! compare for greater
OP_NEQ = 15, ! compare for not equal
OP_AMP = 16, ! concatenation
OP_SUBSTR = 17, ! substringing
OP_NEG = 18, ! negation
OP_NOT = 19, ! logical not
OP_LENGTH = 20, ! length of
OP_COL = 21, ! current column
OP_FIND = 22,
OP_POS = 23, ! current position
OP_LAST_OP = 23; ! last operand type
!+
! LINE NUMBER HANDLING MACROS
!
! These macros are used for arithmetic involving line numbers, so it can
! be transportable across systems with various word lengths. At least 48
! bits of precision are required for line numbers. Line numbers are stored
! as an integer with a scale of -5, i.e. the true value * 10**5, so we can
! have 5 decimal positions and 10 integer positions in the line number.
!-
MACRO
ADDLINE(S1,S2,D1) =
BEGIN EXTERNAL ROUTINE A54_ADD; A54_ADD(S1,S2,D1) END %,
SUBLINE(S3,S4,D2) =
BEGIN EXTERNAL ROUTINE A54_SUB; A54_SUB(S3,S4,D2) END %,
MULTLINE(S5,S6,D3) =
BEGIN EXTERNAL ROUTINE A54_MUL; A54_MUL(S5,S6,D3) END %,
MOVELINE(S11,D6) =
BEGIN EXTERNAL ROUTINE MOVELI; MOVELI(S11,D6) END %,
BUILDLINE(S12,D7) = (D7 = S12; (D7+1) = 0; )%;
!+
! Option switch bit definitions
!-
LITERAL
OPT_QUERY = 2,
OPT_BRIEF = 4,
OPT_NOTYP = 8,
OPT_SEQ = 16,
OPT_DUPL = 32,
OPT_SAVE = 64,
OPT_STAY = 128,
OPT_GO = 256;
MACRO
OPB_QUERY = 1,1 %,
OPB_BRIEF = 2,1 %,
OPB_NOTYP = 3,1 %,
OPB_SEQ = 4,1 %,
OPB_DUPL = 5,1 %,
OPB_SAVE = 6,1 %,
OPB_STAY = 7,1 %,
OPB_GO = 8,1 %;
!
! Input source definitions.
!
! These constants define the source command line input.
!
LITERAL
INP_TERM = 0, ! Terminal
INP_MACRO = 1, ! A macro
INP_COMMAND = 2, ! The startup file
INP_JOURNAL = 3; ! The journal file (only during /RECOVER)
!+
! Terminal type definitions.
!
! These literals define the type of terminal we are running on.
!
LITERAL
TERM_UNKNOWN= 0,
TERM_VT52 = 1,
TERM_VT100 = 2,
TERM_HCPY = 3,
TERM_VT10052= 4;
!+
! Length of type-ahead buffer
!-
LITERAL
K_RDAHED_LEN = 256;
!
! Editor mode definitions.
!
LITERAL
CHANGE_MODE = 0,
LINE_MODE = 1;
!
! definitions for types of words and paras
!
LITERAL
DELIMITED = 0,
NOT_DELIMITED = 1,
WPSPARA = 0,
EDTPARA = 1;
!+
! Define the error codes.
!-
REQUIRE 'EDTSRC:ERRMSG.REQ';
!+
! Definition of the screen update data structure.
!
! This structure has an entry for each line which is represented on the screen.
! In NOTRUNCATE mode, each record may occupy one or more screen lines.
!-
$FIELD
SCR_FIELDS =
SET
SCR_PRV_LINE = [$POINTER], ! Pointer to the previous line
SCR_NXT_LINE = [$POINTER], ! Pointer to the next line
SCR_LINE_IDX = [$BYTE], ! The i'th screen line of this record
SCR_CHR_FROM = [$BYTE], ! Workfile char position from
SCR_CHR_TO = [$BYTE], ! Workfile char position to
SCR_EDIT_MINPOS = [$BYTE], ! Minimum position that has had an edit
SCR_EDIT_MAXPOS = [$BYTE], ! Maximum position that has had an edit
SCR_EDIT_FLAGS = [$BYTE] ! Modify, delete and insert flags
TES;
LITERAL
SCR_SIZE = $FIELD_SET_SIZE;
MACRO
SCREEN_LINE = BLOCK [SCR_SIZE] FIELD(SCR_FIELDS) %;
!+
! These flags go in SCR_EDIT_FLAGS and are also used when calling EDT$$MRK_LNCHG.
!-
LITERAL
SCR_EDIT_MODIFY = 1, ! This line has been modified
SCR_EDIT_INSLN = 2, ! This line has been inserted
SCR_EDIT_DELLN = 4; ! This line has been deleted
!+
! Define function for comparing string ptrs.
!-
MACRO
CH$PTR_GTR(P1,P2) = CH$DIFF(P1,P2) GTR 0 %,
CH$PTR_GEQ(P1,P2) = CH$DIFF(P1,P2) GEQ 0 %,
CH$PTR_EQL(P1,P2) = CH$DIFF(P1,P2) EQL 0 %,
CH$PTR_LEQ(P1,P2) = CH$DIFF(P1,P2) LEQ 0 %,
CH$PTR_LSS(P1,P2) = CH$DIFF(P1,P2) LSS 0 %,
CH$PTR_NEQ(P1,P2) = CH$DIFF(P1,P2) NEQ 0 %;
!+
! Define the entity types.
!-
LITERAL
ENT_K_CHAR = 1,
ENT_K_WORD = 3,
ENT_K_BW = 5,
ENT_K_EW = 7,
ENT_K_LINE = 9,
ENT_K_BL = 11,
ENT_K_NL = 13,
ENT_K_VERT = 15,
ENT_K_EL = 17,
ENT_K_SEN = 19,
ENT_K_BSEN = 21,
ENT_K_ESEN = 23,
ENT_K_PAR = 25,
ENT_K_BPAR = 27,
ENT_K_EPAR = 29,
ENT_K_PAGE = 31,
ENT_K_BPAGE = 33,
ENT_K_EPAGE = 35,
ENT_K_BR = 37,
ENT_K_ER = 39,
ENT_K_QUOTE = 41,
ENT_K_SR = 43,
LAST_K_ENT = 43;
!+
! Define the verb numbers.
!
! These are the codes used to represent the change mode subcommands.
!
! The verbs from VERB_MOVE through VERB_APPEND require entities and
! their verb numbers must remain contiguous.
!-
LITERAL
VERB_K_MOVE = 0,
VERB_K_DELETE= 1,
VERB_K_REPLACE= 2,
VERB_K_CHGC = 3,
VERB_K_CHGU = 4,
VERB_K_CHGL = 5,
VERB_K_SSEL = 6,
VERB_K_FILL = 7,
VERB_K_TADJ = 8,
VERB_K_CUT = 9,
VERB_K_APPEND= 10,
VERB_K_SEL = 11,
VERB_K_SUBS = 12,
VERB_K_PASTE= 13,
VERB_K_INSERT= 14,
VERB_K_XLATE= 15,
VERB_K_CC = 16,
VERB_K_EXIT = 17,
VERB_K_SN = 18,
VERB_K_UNDC = 19,
VERB_K_UNDW = 20,
VERB_K_UNDL = 21,
VERB_K_ADV = 22,
VERB_K_BACK = 23,
VERB_K_REF = 24,
VERB_K_TOP = 25,
VERB_K_HELP = 26,
VERB_K_ASC = 27,
VERB_K_QUIT = 28,
VERB_K_SHL = 29,
VERB_K_SHR = 30,
VERB_K_TAB = 31,
VERB_K_TC = 32,
VERB_K_TD = 33,
VERB_K_TI = 34,
VERB_K_EXT = 35,
VERB_K_KS = 36,
VERB_K_DEFK = 37,
VERB_K_BELL = 38,
VERB_K_DATE = 39,
VERB_K_DUPC = 40,
VERB_K_DLWC = 41,
VERB_K_DMOV = 42,
VERB_K_DESEL = 43,
VERB_K_TGSEL = 44,
VERB_K_CLSS = 45,
LAST_K_VERB = 45;
!
! Changecase types.
!
LITERAL
CASE_K_CHGC = 1, ! Invert case, corresponds to VERB_K_CHGC
CASE_K_CHGU = 2, ! Upper case, corresponds to VERB_K_CHGU
CASE_K_CHGL = 3; ! Lower case, corresponds to VERB_K_CHGL
!+
! PARSER OP-CODE DEFINITIONS
!
! The following are the op-codes accepted by the parser driver.
!-
LITERAL
OPC_ABORT = 0, ! Abort the parse
OPC_ACTION = 1, ! Perform action routine
OPC_CALL = 2, ! Call sub-table
OPC_RETURN = 3, ! End of table or sub-table (return)
OPC_GOTO = 4, ! Unconditional goto
OPC_OPTION = 5, ! Optional phrase check
OPC_REQUIRE = 6, ! Require a specific token
OPC_SELECT = 7, ! select one of several options
OP_ABORT = 0, ! now the bit values
OP_ACTION = 32,
OP_CALL = 64,
OP_RETURN = 96,
OP_GOTO = 128,
OP_OPTION = 160,
OP_REQUIRE = 192,
OP_SELECT = 224;
!+
! Token class definitions
!-
LITERAL
CL_NAME = 0, ! name class
CL_NUMBER = 1, ! the number class
CL_SPECIAL = 2, ! the special character class
CL_STRING = 3; ! The qouted string class
!+
! Parser token handling and matching macros
!-
MACRO
PAR_MIN_LENGTH = 0,0,3,0 %,
PAR_MAX_LENGTH = 0,4,4,0 %,
PAR_OPT_PERCENT = 0,3,1,0 %,
PAR_SYMBOL = 1,0,0,0 %;
!+
! Filespec parsing literal - used by JFNS calls.
!-
LITERAL K_JFNS = %O'221120000001';
!+
! Miscellaneous definitions
!-
!+
! Descriptors on Tops10/20 are one word with the length in the
! left half and the address in the right half.
! File descriptor blocks are in the form a 6-word block containing the JFN,
! the length and address of the full filepec, and the pointers to the four
! main components - device, directory, name, and extension.
!-
MACRO
DSC$L_DESC = 0, 0,36,0 %, ! File descriptor
DSC$A_POINTER = 0, 0,18,0 %, ! Pointer to filespec
DSC$W_LENGTH = 0,18,18,0 %, ! Length of filespec
DSC$W_JFN = 1, 0,18,0 %, ! JFN of file
DSC$W_STATUS = 1,18,18,0 %, ! File status
DSC$A_DEVICE = 2, 0,36,0 %, ! Pointer to device string
DSC$A_DIRECT = 3, 0,36,0 %, ! Pointer to directory string
DSC$A_FNAME = 4, 0,36,0 %, ! Pointer to filename string
DSC$A_FEXTN = 5, 0,36,0 %; ! Pointer to extension string
LITERAL
DSC$K_SIZE = 6; ! Size of descriptor
MACRO STRING_DESC (DESC, LEN, ADDR) =
BEGIN
MAP
DESC : BLOCK[1];
DESC[DSC$A_POINTER] = ADDR;
DESC[DSC$W_LENGTH] = .LEN;
END %;
!+
! The following literals refer to file status.
!-
LITERAL
EDT$K_FILE_OPEN = 1,
EDT$K_FILE_CLOSED = 0;
!+
! FLD macro is used to set up arbitrary fields given a mask. This is used in
! the parser and other places.
!-
MACRO
FLD (VAL, MSK) =
((VAL) ^ (%NBITSU (MSK AND -MSK) -1 )) %;
LITERAL
FLD_9B1 = %O'777000000000', ! First 9-bit byte
FLD_9B2 = %O'000777000000', ! Second 9-bit byte
FLD_9B3 = %O'000000777000', ! Third 9-bit byte
FLD_9B4 = %O'000000000777', ! Fourth 9-bit byte
FLD_LHS = %O'777777000000', ! Left half word
FLD_RHS = %O'000000777777'; ! Right half word
!+
! STRING_9 - generate a string of 9-bit bytes.
!
! This macro must be supplied with a string of values which will be placed
! in 9-bit bytes, 4 per word. If a byte is to be 0, it may be left blank.
! The string must contain an integral number of 4-bytes.
!-
MACRO
STRING_9 (A,B,C,D)[] =
FLD (%IF %NULL (A) %THEN 0 %ELSE A %FI, FLD_9B1) +
FLD (%IF %NULL (B) %THEN 0 %ELSE B %FI, FLD_9B2) +
FLD (%IF %NULL (C) %THEN 0 %ELSE C %FI, FLD_9B3) +
FLD (%IF %NULL (D) %THEN 0 %ELSE D %FI, FLD_9B4)
%IF (%LENGTH GEQ 5) %THEN
, STRING_9 (%REMAINING)
%FI %;
!+
! Screen handling definitions
!-
LITERAL
NO_UPDATE = 256, ! Indicating no update of current line needed
NO_REFRESH = 100, ! Indicating no refresh of screen needed
MESSAG_LINE = 22, ! Line on which messages are displayed
COMMAND_LINE= 23, ! Line on which command prompts are displayed
DIR_FORWARD = 1, ! Forward direction.
DIR_BACKWARD= 0; ! Backward direction.
!+
! Definition of the ASSERT macro. This macro calls EDT$$INTER_ERR if the
! condition is not true.
!-
MACRO ASSERT (CODE,CONDITION) =
BEGIN
IF (NOT (CONDITION))
THEN
BEGIN
EXTERNAL ROUTINE EDT$$INTER_ERR : NOVALUE;
EDT$$INTER_ERR (CODE);
END;
END %;
!+
! Symbols used in control C journaling.
!-
LITERAL
CC_REC_SIZE = 14, ! Size of a control C record
JOU_REC_ESC = %X'1F', ! First (escape) byte of a non-text record in the journal file
CC_REC_FLAG = 1, ! Second byte: control C record
CC_CTR_MAX = 4000000000; ! Maximum counter value in control C handling
!+
! Symbol used in the formatter
!-
LITERAL
FMT_BUFLEN = 512; ! Length of the format buffer
! End of file EDT.REQ