Trailing-Edge
-
PDP-10 Archives
-
bb-d868e-bm_tops20_v41_2020_dist_1of2
-
language-sources/de0n.bli
There are 18 other files named de0n.bli in the archive. Click here to see a list.
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
! OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
!
!COPYRIGHT (C) 1972,1973,1974,1977,1978 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 01754
!FILENAME: LODECL.BLI
!DATE: 18 OCTOBER 73 MGM/FLD
! REVISION HISTORY :
! 5-9-77 ROUTINE DECSYN IS MODIFIED TO DECALRE FORWARD
! DECLARATIONS MORE THAN ONCE.IT ACTS LIKE EXTERNAL
! DECLARATION.
!
%3.2% GLOBAL BIND LODEV=2; !MODULE VERSION NUMBER
GLOBAL ROUTINE CHECKEXTER(STE)=
IF .ST[.STE,0]<TYPEF> EQL UNDEDT
THEN (IDERROR(0,.STE);
ST[.STE,0]<TYPEF>_EXTRNT;
ST[.STE,1]<ADDRESSF>_#777777);
%%
% "DECSYM" AND "DECSYN" ARE USED TO DECLARE A NEW SYMBOL
IN FUTSYM. IT IS REJECTED WITH ERROR CODE DMCODE (PASSED
PARAMETER) WHEN:
1. IT IS NOT A SYMBOL;
2. IT HAS BEEN DECLARED AT THE CURRENT BLOCKLEVEL.
RECOVER IS CALLED IN THE ABOVE TWO CASES; THE RETURNED VALUE
IS 0.
OTHERWISE, THE SYMBOL IS DELCARED AT THE CURRENT BLOCKLEVEL
WITH THE TYPE PASSED (DMTYPE); THE STE INDEX IS STORED
IN THE LOCATION POINTED TO BY DMWHERE. THE VALUE RETURNED IS
TRUE.
DECSYN(DNWHERE:<ADDRESS FOR RETURNED STE INDEX>,
DNTYPE:<TYPE WHICH THE SYMBOL IS TO BE DECLARED>)
(DECSYM IS THE SAME ONLY THE WINDOW IS MOVED AFTER THE CALL).
%
%%
FORWARD DECSYQ;
%5.200.41% EXTERNAL XREFTY;
GLOBAL ROUTINE DECSYN(DNWHERE,DNTYPE)=
BEGIN
LOCAL DNWORD0,DNSTE;
IF .REALFS EQL 0
THEN (RECOVER(.NFUTSYM,ERSYNAME); 0)
ELSE IF (DNWORD0_.ST[DNSTE_.DNWHERE_.REALFS,0]; .DNWORD0<BLF>)
EQL .BLOCKLEVEL
THEN IF .DNWORD0<TYPEF> EQL UNDEDT
THEN (ST[.DNSTE,0]<TYPEF>_.DNTYPE;IF .XREFLG THEN XREFTY(.DNTYPE); 1)
!! (5.200.10) - - -
!! ODD PREVIOUS FIX FOLLOWS. IT CONTRADICTS THE PRECEDING WRITE-UP
!! IF A THING HAS ALREADY BEEN DECLARED IN THIS BLOCK,
!! THEN LET US REGARD IT AS UN-RE-DECLARABLE AND RETURN 0.
!! %3.30% ELSE IF .DNWORD0<TYPEF> EQL .DNTYPE
!! %3.30% THEN 1
!! (5.200.10) - - -
! 5.200.38 .... BY POPULAR REQUEST, LET EXTERNALS OR FORWARD BE MULTIPLY DECLARED
ELSE IF .DNWORD0<TYPEF> EQL .DNTYPE
THEN IF ((.DNTYPE EQL EXTRNT) OR (
.DNTYPE EQL FORWT)) THEN 1
ELSE (RECOVER(.NFUTSYM,ERSMPREV);0)
! MAY REDECLARE AN EXTERNAL OR FORWARD, BUT NOT A LOCAL, GLOBAL, OWN, STRUCTURE, ETC.
! ....5.200.38
%3.30% ELSE (RECOVER(.NFUTSYM,ERSMPREV); 0)
ELSE (.DNWHERE_DECSYQ(.DNSTE,.DNTYPE,0);1)
END;
%3.1% GLOBAL ROUTINE DECSYM(DMWHERE,DMTYPE)=
IF DECSYN(.DMWHERE,.DMTYPE)
THEN (HRUND(); 1)
ELSE 0;
%%
% DECSYQ(DQSTE:<STE OF OLD NAME>,
DQTYPE:<TYPE FOR NEW NAME>,
DQADDL:<ADDITIONAL INFORMATION WORD>)
DECLARE THE SYMBOL WITH OLD NAME AS NEW N CURRENT CONTEXT.
VALUE IS NEW STE INDEX.
%
%%
%3.1% GLOBAL ROUTINE DECSYQ(DQSTE,DQTYPE,DQADDL)=
BEGIN
%5.200.41% LOCAL L;
ACCUM_.ST[.DQSTE,2];
(ACCUM+1)_.ST[.DQSTE,3];
L_ STINSERT((.DQTYPE^TYPEFP)+LSM, .DQADDL);
%5.200.41% IF .XREFLG THEN XREFTY(.DQTYPE);
%5.200.41% .L
END;
%%
% THE ROUTINE "GENFCN" IS USED TO CREATE A NEW FUNCTION-HEADER
AND SUB-HEADERS FOR SYMBOLS NOT ALREADY DECLARED
FORWARD. WHEN IT HAS NOT BEEN DECLARED FORWARD, WE:
1. GET SPACE FOR THE HEADER (A 2 CELL HEADER WITH 4 SUBHEADERS);
2. INITIALIZE IT FOR THE LOADER (WITH STE INDEX OF FUNCTION
AND OCTAL 7S TO INDICATE NO PROCESSING YET);
3. PUSH IT ONTO THE FUNCTION LIST.
4. SET THE ADD'L INF. WORD ADDRESS PORTION TO POINT TO THE
CREATED HEADER.
PARAMETER: THE FUNCTION/ROUTINE/STRUCTURE STE INDEX.
RETURNED VALUE: THE CTE FOR THE CREATED HEADER.
%
%%
GLOBAL ROUTINE GENFCN(GENSTE) =
BEGIN
LOCAL SAVE;
IF (SAVE_.ST[.GENSTE,1]<LXTEAF>) EQL 0
THEN
(ST[.GENSTE,1]<LXTEAF>_SAVE_SKELETON(2,FRC,4);
PUSHBOT(.FCNLIST,.SAVE);
CT[.SAVE,2]_.GENSTE;
CT[.SAVE,3]_-1);
.SAVE
END;
!END OF LODECL.BLI