%SBTTL 'DUMPER Symbol definitions' !++ ! FACILITY: ! ! DUMPER-32 ! ! ABSTRACT: ! ! This module contains the various symbol and macro definitions for ! DUMPER-32. ! ! AUTHORS: ! ! Robert C. McQueen ! ! CREATION DATE: 15-April-1985 ! ! MODIFICATION HISTORY: !-- ! ! MACROS: ! ! ! Single entry vectors (useful for REF's to longwords, etc.) ! MACRO $BYTE = VECTOR [1, BYTE] %, $WORD = VECTOR [1, WORD] %, $LONGWORD = VECTOR [1, LONG] %; ! ! Descriptor ! MACRO $DESCRIPTOR_DECL = $BBLOCK [DSC$K_S_BLN] %; KEYWORDMACRO $DESCRIPTOR_INIT (DESCRIPTOR, BUFFER, SIZE) = BEGIN DESCRIPTOR [DSC$B_CLASS] = DSC$K_CLASS_S; DESCRIPTOR [DSC$B_DTYPE] = DSC$K_DTYPE_T; DESCRIPTOR [DSC$W_LENGTH] = SIZE; DESCRIPTOR [DSC$A_POINTER] = BUFFER END %; ! ! IOSB block definitions ! LITERAL $IOSB_LENGTH = 2; ! Number of long words in an IOSB MACRO $IOSB_DECL = BLOCK[2 , LONG] FIELD($IOSB_FIELDS) %; FIELD $IOSB_FIELDS = SET IOSB_START = [0, 0, 0, 0], IOSB_STATUS = [0, 0, 16, 0 ], IOSB_COUNT = [0, 16, 16, 0 ], IOSB_DEVDEPEND = [1, 0, 32, 0 ] TES; ! [~macro_or_keywordmacro_declaration~]... ! ! EQUATED SYMBOLS: ! ! ! Basic symbols ! LITERAL TRUE = 0 EQL 0, ! Value of TRUE FALSE = 0 NEQ 0; ! Value of FALSE ! ! Symbols for the various qualifiers which take keyword values. ! ! ! Tape format ! LITERAL FORMAT$K_MIN = 1, ! Minimum format value FORMAT$K_BACKUP = 1, ! Tape is non-interchange BACKUP FORMAT$K_DUMPER = 2, ! Tape is DUMPER format FORMAT$K_INTERCHANGE = 3, ! Tape is interchange (either) FORMAT$K_INTERCHANGE_BACKUP = 4, ! Tape is interchange written by BACKUP FORMAT$K_INTERCHANGE_DUMPER = 5, ! Tape is interchange written by DUMPER FORMAT$K_MAX = 5; ! Maximum format value ! ! Logging type ! LITERAL LOG$K_FILES = 1, ! Type files info LOG$K_DIRECTORIES = 2, ! Type directory info LOG$K_ALL = 3; ! Log all info ! ! Interface symbols for determining what EXTRACT_FIELDS returns in the RESULT ! BLOCK vector. ! LITERAL FLD$K_DEVICE = 0, ! Offset to device name FLD$K_DIRECT = 1, ! Offset to directory name FLD$K_NAME = 2, ! Offset to file name FLD$K_EXT = 3, ! Offset to file extension FLD$K_VERSION = 4, ! Offset to file version (generation) FLD$K_LENGTH = 5; ! Length of field block ! ! Symbols to set the type of file to be written ! LITERAL FILE_TYPE_MINIMUM = 0, ! First FILE_TYPE_7BIT_CHARACTERS = 0, ! 7bit -> 8bit characters FILE_TYPE_8BIT_DATA = 1, ! 8bit data FILE_TYPE_36BIT_DATA = 2, ! 4 7bit data items into 8bits ! 1 8 bit data item FILE_TYPE_NON_STANDARD = 3, ! None of the above FILE_TYPE_MAXIMUM = 3; ! Last ! ! Fields for dispatch vector for BACKUP/DUMPER specific routines ! FIELD ROUTINE_DISPATCH = SET READ_RECORD = [0], ! Read record and perform basic record decoding CHECK_SAVE_SET = [1], ! Check if save set record and check ! if correct save set PROCESS_FILE = [2], ! Process file header record PROCESS_DATA = [3], ! Process data record SKIP_SAVE_SET = [4], ! Skip a save set LIST_RECORD = [5], ! List a record BLOCK_SIZE = [6] ! Size of data records from tape TES; ! ! Blocking/direction flag values for READ_RECORD routines ! LITERAL FORWARD_BLOCK = +1, ! Forward a block FORWARD_RECORD = 0, ! Forward a record BACKWARD_BLOCK = -1; ! Backwards a block %SBTTL '36 bit data description' ! ! The following is the 36 bit data descriptions. This description includes ! what the frames on the magnetic tape look like from a DECSYSTEM-20 or ! DECsystem-10. ! ! Frame #0 - Contains bits 0 to 7 ! Frame #1 - Contains bits 8 to 15 ! Frame #2 - Contains bits 16 to 23 ! Frame #3 - Contains bits 24 to 31 ! Frame #4 - Contains bits 32 to 35 in the low order part of the byte ! ! ! ! The following defines what a word is in VAX terms ! FIELD DEC_36_BIT_WORD_FIELD = SET FRAME_ALL = [0, 0, 0, 0], ! For use in address expresions FRAME_0 = [0, 0, 8, 0], ! DEC-10 bits 0-7 FRAME_1 = [1, 0, 8, 0], ! DEC-10 bits 8-15 FRAME_2 = [2, 0, 8, 0], ! DEC-10 bits 16-23 FRAME_3 = [3, 0, 8, 0], ! DEC-10 bits 23-31 FRAME_4 = [4, 0, 4, 0] ! DEC-10 bits 32-35 TES; MACRO VAX_SIXBIT_CHARACTER_DECL = BLOCK[1, BYTE] FIELD(VAX_SIXBIT_CHAR_FIELDS) %; ! ! Fields for storing the sixbit characters into a byte ! NOTE: Must add the 40(octal) on after the character is built into the ! BYTE. ! FIELD VAX_SIXBIT_CHAR_FIELDS = SET VAX_SIXBIT_CHAR_0 = [0, 0, 8, 0], VAX_SIXBIT_CHAR_1_H = [0, 4, 2, 0], VAX_SIXBIT_CHAR_1_L = [0, 0, 4, 0], VAX_SIXBIT_CHAR_2_H = [0, 2, 4, 0], VAX_SIXBIT_CHAR_2_L = [0, 0, 2, 0], VAX_SIXBIT_CHAR_3 = [0, 0, 8, 0], VAX_SIXBIT_CHAR_4 = [0, 0, 8, 0], VAX_SIXBIT_CHAR_5_H = [0, 4, 2, 0], VAX_SIXBIT_CHAR_5_L = [0, 0, 4, 0] TES; ! ! Fields for fetching the sixbit information from the 36bit word ! FIELD DEC_36_BIT_SIXBIT_CHAR_FIELDS = SET SIXBIT_CHAR_0 = [0, 2, 6, 0 ], SIXBIT_CHAR_1_H = [0, 0, 2, 0 ], SIXBIT_CHAR_1_L = [1, 4, 4, 0 ], SIXBIT_CHAR_2_H = [1, 0, 4, 0 ], SIXBIT_CHAR_2_L = [2, 6, 2, 0 ], SIXBIT_CHAR_3 = [2, 0, 6, 0 ], SIXBIT_CHAR_4 = [3, 2, 6, 0 ], SIXBIT_CHAR_5_H = [3, 0, 2, 0 ], SIXBIT_CHAR_5_L = [4, 0, 4, 0 ] TES; ! ! The following are the fields that are used to build a VAX character from ! the -10/20 7bit character fields ! MACRO VAX_7BIT_CHARACTER_DECL = BLOCK[1 , BYTE] FIELD(VAX_7BIT_CHAR_FIELDS)%; FIELD VAX_7BIT_CHAR_FIELDS = SET VAX_CHAR_0 = [0, 0, 8, 0], VAX_CHAR_1_H = [0, 6, 2, 0], VAX_CHAR_1_L = [0, 0, 6, 0], VAX_CHAR_2_H = [0, 5, 3, 0], VAX_CHAR_2_L = [0, 0, 5, 0], VAX_CHAR_3_H = [0, 4, 4, 0], VAX_CHAR_3_L = [0, 0, 4, 0], VAX_CHAR_4_H = [0, 3, 5, 0], VAX_CHAR_4_L = [0, 0, 3, 0], VAX_LSN_BIT = [0, 7, 1, 0] TES; ! ! The following define the -10/20 7-bit character fields as they are seen in the ! frames from the tape. ! FIELD DEC_36_BIT_7BIT_CHAR_FIELDS = SET CHAR_0 = [0, 1, 7, 0], CHAR_1_H = [0, 0, 1, 0], CHAR_1_L = [1, 2, 6, 0], CHAR_2_H = [1, 0, 2, 0], CHAR_2_L = [2, 3, 5, 0], CHAR_3_H = [2, 0, 3, 0], CHAR_3_L = [3, 4, 4, 0], CHAR_4_H = [3, 0, 4, 0], CHAR_4_L = [4, 1, 3, 0], LSN_BIT = [4, 0, 1, 0] TES; LITERAL DEC_36_BIT_WORD_SIZE = 5; MACRO DEC_36_BIT_WORD = BLOCK[DEC_36_BIT_WORD_SIZE, BYTE] FIELD(DEC_36_BIT_WORD_FIELD, DEC_36_BIT_7BIT_CHAR_FIELDS, DEC_36_BIT_SIXBIT_CHAR_FIELDS)%; MACRO DEC_36_BIT_RECORD = BLOCKVECTOR[, DEC_36_BIT_WORD_SIZE, BYTE] FIELD(DEC_36_BIT_WORD_FIELD, DEC_36_BIT_7BIT_CHAR_FIELDS, DEC_36_BIT_SIXBIT_CHAR_FIELDS)%; ! ! The following describe the information about a byte pointer. ! LITERAL BPT_POSITION_SIZE = 6, ! Position field is 6 bits BPT_POSITION_POS = 0, ! From bit 0 BPT_SIZE_SIZE = 6, ! Size field is 6 bits BPT_SIZE_POS = 6, ! From bit 6 BPT_ZERO_SIZE = 6, ! Information that should be zero BPT_ZERO_POS = 12, ! Starts at bit 12 BPT_ADDRESS_SIZE = 18, ! Address field is 18 bits BPT_ADDRESS_POS = 18; ! Starting at bit 18