Trailing-Edge
-
PDP-10 Archives
-
BB-H348C-RM_1982
-
swskit-v21/debugging-tools/ddt11/stb.b36
There are no other files named stb.b36 in the archive.
! NET:<GUNN>STB.B36.2 3-Nov-81 09:00:04, Edit by GUNN
!
! Add print out of length for PSECT GSD records.
!
MODULE STB ( !
IDENT = '001010',
LANGUAGE (BLISS36) ,
MAIN = STB
) =
BEGIN
!
! COPYRIGHT (c) 1979, 1980 BY
! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
!
! 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.
!
!++
! FACILITY: RSX symbol table file interpreter
!
! ABSTRACT:
!
!
! ENVIRONMENT: TOPS20
!
! AUTHOR: ALAN D. PECKHAM , CREATION DATE: 23-AUG-79
!
! MODIFIED BY:
!
! , : VERSION
! 01 -
!--
!
! TABLE OF CONTENTS:
!
FORWARD ROUTINE
BACKUP : NOVALUE, !Back up over edited message removing blanks.
DUMP : NOVALUE, !Dump a message buffer.
GET_RECORD, !Get a record from the file.
PUTLIN : NOVALUE, !Edit and display a line of text.
STB : NOVALUE;
!
! INCLUDE FILES:
!
LIBRARY 'BLI:MONSYM'; !Define the TOPS20 monitor symbols.
BUILTIN
JSYS; !Define the JSYS machine specific function.
!
! MACROS:
!
!
! These two macros are from TENDEF.R36
!
! POINTR(adr,mask)
!
! Inputs:
! adr - an address
! mask - a literal mask of bits
!
! Expansion:
! (adr) < pos , siz > where "pos" and "siz" are inferred from "mask"
!
MACRO
POINTR (adr, mask) =
adr
<
%NBITSU(mask AND - mask) - 1
,
%NBITSU(mask) - %NBITSU(mask AND - mask) + 1
>
%;
! FLD(val,mask)
!
! Inputs:
! val - a value
! mask - a literal mask of bits
!
! Expansion:
! (val ^ pos) where "pos" is inferred from "mask"
!
MACRO
FLD (val, mask) =
(
(val)
^
(%NBITSU(mask AND - mask) - 1)
)
%;
!
! Convenient character string macros
!
MACRO
CH$LEN (PTR) =
!Get length of ASCIZ string.
CH$DIFF(CH$FIND_CH(200,PTR,0),PTR) %,
CH$SEQUENCE (CHARS, CS) =
!Allocate storage for string.
VECTOR[CH$ALLOCATION(CHARS,CS)] %,
CH$ASCIC [] =
!A pointer to an ASCIC string.
CH$PTR(UPLIT(%STRING(%CHAR(%CHARCOUNT(%REMAINING)),%REMAINING)),1) %,
CH$ASCII [] =
!A pointer to an ASCII string.
CH$PTR(UPLIT(%ASCII %STRING(%REMAINING))) %,
CH$ASCIZ [] =
!A pointer to an ASCIZ string.
CH$PTR(UPLIT(%ASCIZ %STRING(%REMAINING))) %;
MACRO
BYTES_PTR [] =
CH$PTR(UPLIT(WRD36(%EXPLODE(%REMAINING))),,8) %,
WRD36 [CHR1, CHR2, CHR3, CHR4] =
(CHR8 (CHR1)^28+CHR8 (CHR2)^20+CHR8 (CHR3)^12+CHR8 (CHR4)^4) %,
CHR8 (CHR) =
%IF %NULL (CHR) %THEN 0 %ELSE %C CHR %FI %;
!
! DISPLAY A LINE OF TEXT
!
MACRO
PUTLN (SKIP, EDIT) [] =
BEGIN
%IF %LENGTH GTR 2
%THEN
LOCAL PRM_LIST : VECTOR[%LENGTH-2];
MACRO PUTASG[PARAMETER] =
PRM_LIST[%COUNT]=PARAMETER %QUOTE %;
PUTASG( %REMAINING );
PUTLIN( SKIP, EDIT, PRM_LIST )
%ELSE
PUTLIN( SKIP, EDIT, 0 )
%FI
END %;
MACRO
FATAL =
'*FATAL* ' %,
WARNING =
'*WARNING* ' %;
!
! EQUATED SYMBOLS:
!
LITERAL
TRUE = 1, !Truisms.
FALSE = 0;
!
! OWN STORAGE:
!
OWN
FIRST_BYTE : INITIAL (FALSE),
LOAD_ADDRESS : INITIAL (0),
MACY11_FORMAT : INITIAL (FALSE),
PSECT_NAME : VECTOR [2] INITIAL (0, 0),
STB_JFN;
!
! EXTERNAL REFERENCES:
!
EXTERNAL ROUTINE
$EDMSG;
ROUTINE BACKUP (BUF_PTR_ADR, PAT_PTR_ADR, PRM_LST_ADR_ADR) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
! FORMAL PARAMETERS:
!
! ..BUF_PTR_ADR !Pointer to output buffer.
! ..PAT_PTR_ADR !Pointer to pattern string.
! ..PRM_LST_ADR_ADR !Pointer to next parameter.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LOCAL
PTR;
WHILE CH$RCHAR (PTR = CH$PLUS (..BUF_PTR_ADR, -1)) EQL %C' ' DO
.BUF_PTR_ADR = .PTR;
END; !End of BACKUP
ROUTINE DUMP (ADDRESS, MSG_PTR_ADR, MSG_LEN_ADR) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LITERAL
BYTES_PER_LINE = 16;
OWN
BYTE_BUFFER : CH$SEQUENCE (BYTES_PER_LINE, 8);
LOCAL
ADR,
CNT,
LEN,
MSG_PTR,
PTR;
BIND
BYTE_PTR = CH$PTR (BYTE_BUFFER,, 8);
ADR = .ADDRESS;
MSG_PTR = .MSG_PTR_ADR;
LEN = .MSG_LEN_ADR;
WHILE .LEN GTR 0 DO
BEGIN
PTR = BYTE_PTR;
INCR CNT FROM 1 TO BYTES_PER_LINE DO
CH$WCHAR_A (CH$RCHAR_A (MSG_PTR), PTR);
PUTLN (0, CH$ASCIZ (' %P %#B'), .ADR, MIN (.LEN, BYTES_PER_LINE), BYTE_PTR);
ADR = .ADR + BYTES_PER_LINE;
LEN = .LEN - BYTES_PER_LINE
END;
END; !End of DUMP
ROUTINE GET_RECORD (ADDRESS_PTR, LENGTH) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
COUNT,
TEMP_PTR;
TEMP_PTR = .ADDRESS_PTR;
IF NOT .MACY11_FORMAT
THEN
BEGIN
DO
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC1 = .STB_JFN;
JSYS (-1, BIN, AC1, AC2);
COUNT = .AC2;
END
WHILE .COUNT EQL 0;
DECR INDEX FROM (.COUNT + 1)^-1 TO 1 DO
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC1 = .STB_JFN;
JSYS (-1, BIN, AC1, AC2);
CH$WCHAR_A (.AC2<0, 8>, TEMP_PTR);
CH$WCHAR_A (.AC2<8, 8>, TEMP_PTR);
END;
END
ELSE
BEGIN
LOCAL
CHAR,
INDEX,
STATE;
OWN
WORD_READ;
STATE = 0;
DO
BEGIN
IF (FIRST_BYTE = NOT .FIRST_BYTE)
THEN
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC1 = .STB_JFN;
JSYS (-1, BIN, AC1, AC2);
WORD_READ = .AC2;
CHAR = .WORD_READ<0, 8>
END
ELSE
CHAR = .WORD_READ<8, 8>;
CASE .STATE FROM 0 TO 5 OF
SET
[0] :
IF .CHAR EQL 1 THEN STATE = 1;
[1] :
STATE = 2;
[2] :
BEGIN
COUNT = 0;
COUNT<0, 8> = .CHAR;
STATE = 3;
END;
[3] :
BEGIN
COUNT<8, 8> = .CHAR;
INDEX = (COUNT = .COUNT - 4);
STATE = 4;
END;
[4] :
BEGIN
CH$WCHAR_A (.CHAR, TEMP_PTR);
IF (INDEX = .INDEX - 1) EQL 0 THEN STATE = 5;
END;
[5] :
STATE = -1;
TES;
END
UNTIL .STATE LSS 0;
END;
.COUNT
END; !End of GET_RECORD
ROUTINE PUTLIN (TIMES, PATTERN_PTR, PRM_LIST_ADR) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! TIMES !NUMBER OF LINES TO SKIP
! !BEFORE DISPLAYING LINE
! PATTERN !ASCIZ STRING USED TO CONTROL
! !CONSTRUCTION OF OUTPUT LINE
! PARAMETER_LIST !PARAMETERS TO TRANSLATE INTO
! !THE OUTPUT LINE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
OWN
BUFFER : CH$SEQUENCE (133), !General editing buffer.
BUF_LNG; !Length of edited string.
BIND
BUF_PTR = CH$PTR (BUFFER), !Pointer to print buffer.
CRLF = CH$ASCIZ (%CHAR (13, 10)); !a pointer to a crlf
BUF_LNG = .TIMES;
WHILE (BUF_LNG = .BUF_LNG - 1) GEQ 0 DO
BEGIN
REGISTER
AC1 = 1;
AC1 = CRLF;
JSYS (0, PSOUT, AC1);
END;
$EDMSG (%REF (BUF_PTR), .PATTERN_PTR, .PRM_LIST_ADR);
BEGIN
REGISTER
AC1 = 1;
AC1 = BUF_PTR;
JSYS (0, PSOUT, AC1);
AC1 = CRLF;
JSYS (0, PSOUT, AC1);
END;
END; !OF PUTLIN
ROUTINE STB : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
BEGIN
REGISTER
AC1 = 1;
AC1 = CH$ASCIZ ('INPUT FILE NAME: ');
JSYS (0, PSOUT, AC1);
END;
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC2 = $PRIIN^18 + $PRIOU;
AC1 = GJ_OLD + GJ_MSG + GJ_CFM + GJ_FNS + GJ_SHT + $GJDEF;
JSYS (1, GTJFN, AC1, AC2);
STB_JFN = .AC1<0, 18>;
END;
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC2 = FLD (18, OF_BSZ) + OF_RD + OF_AWT + OF_PDT + OF_NWT;
JSYS (1, OPENF, AC1, AC2);
END;
BEGIN
MACY11_FORMAT =
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC1 = .STB_JFN;
JSYS (-1, BIN, AC1, AC2);
.AC2
END
EQL 1;
BEGIN
REGISTER
AC1 = 1,
AC2 = 2;
AC1 = .STB_JFN;
AC2 = 0;
JSYS (-1, SFPTR, AC1, AC2);
END;
END;
WHILE TRUE DO
BEGIN
MACRO
PTR (INDEX) =
CH$PTR(BUFFER,INDEX,8) %,
CHAR (INDEX) =
CH$RCHAR(PTR(INDEX)) %;
LITERAL
MAX_COUNT = %O'1000';
OWN
BUFFER : CH$SEQUENCE (MAX_COUNT, 8),
COUNT;
COUNT = GET_RECORD (PTR (0), MAX_COUNT);
BEGIN
MACRO
SYMBOL (SYM_ADR, REC_PTR) =
BEGIN
BIND
T_0 = SYM_ADR [0],
T_1 = SYM_ADR [1];
T_0 = 0;
T_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
T_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
T_1 = 0;
T_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
T_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
END %;
CASE CHAR (0) FROM 1 TO 6 OF
SET
[1] :
!
! GSD - declare Global Symbol Dictionary
!
BEGIN
LOCAL
FLAGS,
NAME_0,
NAME_1,
RECORD_END,
RECORD_PTR,
TYPE,
VALUE;
OWN
PSECT_NAME_0 : INITIAL (0),
PSECT_NAME_1 : INITIAL (0);
PUTLN (0, CH$ASCIZ ('GSD record'));
RECORD_PTR = PTR (2);
RECORD_END = PTR (.COUNT);
WHILE CH$DIFF (.RECORD_END, .RECORD_PTR) GTR 0 DO
BEGIN
NAME_0 = 0;
NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
NAME_1 = 0;
NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
FLAGS = CH$RCHAR_A (RECORD_PTR);
TYPE = CH$RCHAR_A (RECORD_PTR);
VALUE = 0;
VALUE<0, 8> = CH$RCHAR_A (RECORD_PTR);
VALUE<8, 8> = CH$RCHAR_A (RECORD_PTR);
CASE .TYPE FROM 0 TO 7 OF
SET
[0] :
!
! Module name
!
PUTLN (0, CH$ASCIZ (' Module name: %2R%@'), .NAME_0, .NAME_1, BACKUP);
[1] :
!
! Control section name
!
PUTLN (0, CH$ASCIZ (' Control Section name: %2R%@, length: %O'), .NAME_0,
.NAME_1, BACKUP, .VALUE);
[2] :
!
! Internal symbol name
!
PUTLN (0, CH$ASCIZ (' Internal Symbol name: %2R%@'), .NAME_0, .NAME_1, BACKUP);
[3] :
!
! Transfer address
!
PUTLN (0, CH$ASCIZ (' Transfer to p-section %2R%@ + %O'), .NAME_0, .NAME_1,
BACKUP, .VALUE);
[4] :
!
! Global symbol name
!
BEGIN
IF .FLAGS<3, 1>
THEN
PUTLN (0,
(IF .FLAGS<5, 1> THEN CH$ASCIZ (' Global Symbol %2R = %2R%@ + %O''') ELSE
CH$ASCIZ (' Global Symbol %2R = %2R%@ + %O')), .NAME_0, .NAME_1,
.PSECT_NAME_0, .PSECT_NAME_1, BACKUP, .VALUE)
ELSE
PUTLN (0, CH$ASCIZ (' Global Symbol %2R%@ referenced'), .NAME_0, .NAME_1,
BACKUP);
IF .FLAGS<0, 1>
THEN
IF .FLAGS<3, 1>
THEN
PUTLN (0, CH$ASCIZ ('%4SWeak definition'))
ELSE
PUTLN (0, CH$ASCIZ ('%4SWeak reference'));
IF .FLAGS<2, 1> THEN PUTLN (0, CH$ASCIZ ('%4SLibrary definition'));
!* MORE TO COME
END;
[5] :
!
! Program section name
!
BEGIN
PSECT_NAME_0 = .NAME_0;
PSECT_NAME_1 = .NAME_1;
PUTLN (0, CH$ASCIZ (' Program Section %2R%@, length: %O'), .NAME_0, .NAME_1, BACKUP, .VALUE);
IF .FLAGS<0, 1>
THEN
PUTLN (0,
CH$ASCIZ ('%4SHigh speed memory occupation requested'));
IF .FLAGS<1, 1> THEN PUTLN (0, CH$ASCIZ ('%4SResident library psect'));
IF .FLAGS<2, 1> THEN PUTLN (0, CH$ASCIZ ('%4SOverlaid'));
IF .FLAGS<4, 1>
THEN
PUTLN (0, CH$ASCIZ ('%4SRead-only'))
ELSE
PUTLN (0,
CH$ASCIZ ('%4SRead-write'));
IF .FLAGS<7, 1>
THEN
PUTLN (0, CH$ASCIZ ('%4SData'))
ELSE
PUTLN (0,
CH$ASCIZ ('%4SInstruction'));
IF .FLAGS<5, 1> THEN PUTLN (0, CH$ASCIZ ('%4SRelocatable'));
IF .FLAGS<6, 1> THEN PUTLN (0, CH$ASCIZ ('%4SGlobal'));
!* MORE TO COME
END;
[6] :
!
! Program version identification
!
PUTLN (0, CH$ASCIZ (' Program version %2R%@'), .NAME_0, .NAME_1, BACKUP);
[7] :
!
! Mapped array declaration
!
PUTLN (0, CH$ASCIZ (' Mapped array %2R%@, length: %O blocks'), .NAME_0, .NAME_1,
BACKUP, .VALUE);
[INRANGE, OUTRANGE] :
RETURN PUTLN (1, CH$ASCIZ (FATAL, 'Invalid GSD record type: %O'), .TYPE);
TES;
END;
END;
[2] :
!
! End of Global Symbol Dictionary
!
PUTLN (0, CH$ASCIZ ('End GSD record'));
[3] :
!
! TXT - TeXT information
!
BEGIN
PUTLN (0, CH$ASCIZ ('TXT record'));
LOAD_ADDRESS<0, 8> = CHAR (2);
LOAD_ADDRESS<8, 8> = CHAR (3);
DUMP (.LOAD_ADDRESS, PTR (4), .COUNT - 4);
IF .LOAD_ADDRESS GEQ 4 THEN LOAD_ADDRESS = .LOAD_ADDRESS - 4;
END;
[4] :
!
! RLD - ReLocation Dictionary
!
BEGIN
LOCAL
RECORD_END,
RECORD_PTR,
SIZE,
TYPE;
OWN
CONSTANT : INITIAL (0),
DISP : INITIAL (0),
LOCATION_CTR : INITIAL (0);
PUTLN (0, CH$ASCIZ ('RLD record'));
RECORD_PTR = PTR (2);
RECORD_END = PTR (.COUNT);
WHILE CH$DIFF (.RECORD_END, .RECORD_PTR) GTR 0 DO
BEGIN
TYPE = CH$RCHAR_A (RECORD_PTR);
SIZE = (IF .TYPE<7, 1> THEN CH$ASCII ('BYTE') ELSE CH$ASCII ('WORD'));
CASE .TYPE<0, 7> FROM 1 TO 16 OF
SET
[1] :
BEGIN
DISP = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@ + %O'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .CONSTANT);
END;
[2] :
BEGIN
LOCAL
SYMBOL_NAME_0,
SYMBOL_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0 = 0;
SYMBOL_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1 = 0;
SYMBOL_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .SYMBOL_NAME_0,
.SYMBOL_NAME_1, BACKUP);
END;
[3] :
BEGIN
DISP = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %O'''), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .CONSTANT);
END;
[4] :
BEGIN
LOCAL
SYMBOL_NAME_0,
SYMBOL_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0 = 0;
SYMBOL_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1 = 0;
SYMBOL_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'''), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .SYMBOL_NAME_0,
.SYMBOL_NAME_1, BACKUP);
END;
[5] :
BEGIN
LOCAL
SYMBOL_NAME_0,
SYMBOL_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0 = 0;
SYMBOL_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1 = 0;
SYMBOL_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@ + %O'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .SYMBOL_NAME_0,
.SYMBOL_NAME_1, BACKUP, .CONSTANT);
END;
[6] :
BEGIN
LOCAL
SYMBOL_NAME_0,
SYMBOL_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0 = 0;
SYMBOL_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1 = 0;
SYMBOL_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
SYMBOL_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'' + %O'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .SYMBOL_NAME_0,
.SYMBOL_NAME_1, BACKUP, .CONSTANT);
END;
[7] :
BEGIN
BIND
PSECT_NAME_0 = (PSECT_NAME [0]),
PSECT_NAME_1 = (PSECT_NAME [1]);
RECORD_PTR = CH$PLUS (.RECORD_PTR, 1);
PSECT_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
LOCATION_CTR<0, 8> = CH$RCHAR_A (RECORD_PTR);
LOCATION_CTR<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' . (%A) = %2R%@ + %O'), .SIZE, .PSECT_NAME_0,
.PSECT_NAME_1, BACKUP, .LOCATION_CTR);
END;
[8] :
BEGIN
RECORD_PTR = CH$PLUS (.RECORD_PTR, 1);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' . (%A) = . + %O'), .SIZE, .CONSTANT);
END;
[9] :
BEGIN
DISP = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = .LIMIT'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE);
END;
[10] :
BEGIN
LOCAL
PSECT_NAME_0,
PSECT_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0 = 0;
PSECT_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1 = 0;
PSECT_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .PSECT_NAME_0,
.PSECT_NAME_1, BACKUP);
END;
[12] :
BEGIN
LOCAL
PSECT_NAME_0,
PSECT_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0 = 0;
PSECT_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1 = 0;
PSECT_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'''), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .PSECT_NAME_0,
.PSECT_NAME_1, BACKUP);
END;
[13] :
BEGIN
LOCAL
PSECT_NAME_0,
PSECT_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0 = 0;
PSECT_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1 = 0;
PSECT_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@ + %O'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .PSECT_NAME_0,
.PSECT_NAME_1, BACKUP, .CONSTANT);
END;
[14] :
BEGIN
LOCAL
PSECT_NAME_0,
PSECT_NAME_1;
DISP = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0 = 0;
PSECT_NAME_0<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_0<8, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1 = 0;
PSECT_NAME_1<0, 8> = CH$RCHAR_A (RECORD_PTR);
PSECT_NAME_1<8, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<0, 8> = CH$RCHAR_A (RECORD_PTR);
CONSTANT<8, 8> = CH$RCHAR_A (RECORD_PTR);
PUTLN (0, CH$ASCIZ (' %2R%@ + %O (%A) = %2R%@'' + %O'), .PSECT_NAME [0],
.PSECT_NAME [1], BACKUP, .LOAD_ADDRESS + .DISP, .SIZE, .PSECT_NAME_0,
.PSECT_NAME_1, BACKUP, .CONSTANT);
END;
[16] :
RECORD_PTR = CH$PLUS (.RECORD_PTR, 3);
[15] :
BEGIN
LOCAL
OPERATION;
RECORD_PTR = CH$PLUS (.RECORD_PTR, 1);
WHILE TRUE DO
SELECTONE (OPERATION = CH$RCHAR_A (RECORD_PTR)) OF
SET
[0, 1, 2, 3, 4, 5, 6, 8, 9, 17] :
0;
[10, 11] :
EXITLOOP;
[14] :
RECORD_PTR = CH$PLUS (.RECORD_PTR, 4);
[15] :
RECORD_PTR = CH$PLUS (.RECORD_PTR, 3);
[16] :
RECORD_PTR = CH$PLUS (.RECORD_PTR, 2);
[OTHERWISE] :
RETURN PUTLN (1,
CH$ASCIZ (FATAL,
'Invalid complex relocation operation: %O'), .OPERATION);
TES;
END;
[INRANGE, OUTRANGE] :
RETURN PUTLN (1, CH$ASCIZ (FATAL, 'Invalid RLD entry type: %O'), .TYPE<0, 7>);
TES;
END;
END;
[5] :
!
! ISD - Internal Symbol Dictionary
!
PUTLN (0, CH$ASCIZ ('ISD record'));
[6] :
!
! End of Module
!
RETURN PUTLN (0, CH$ASCIZ ('End of module record'));
[INRANGE, OUTRANGE] :
RETURN PUTLN (1, CH$ASCIZ (FATAL, 'Invalid record type: %O'), CHAR (0));
TES;
END;
END;
END; !End of STB
END !End of module
ELUDOM