Trailing-Edge
-
PDP-10 Archives
-
BB-H580C-SB_1981
-
args.mac
There are 7 other files named args.mac in the archive. Click here to see a list.
TITLE ARGS FOR LIBOL
SUBTTL PICK UP ARGUMENTS FOR SUBPROGRAM ENTRY CHUCK MCCOMAS
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1974, 1981 BY DIGITAL EQUIPMENT CORPORATION
ENTRY ARGS.
;USED BY SUBPROGRAM ENTRY POINTS
; TO PICK UP BASE ADDRESSES OF ARGS PASSED TO THE ENTRY BY A CALL,
; AND TO STORE THEM IN DUMMY ARG INDEX LOCATIONS
;CALLING SEQUENCE:
; MOVEI 16,ARGLST
; PUSHJ 17,ARGS.
; <RETURN HERE>
;
;WITH ARGUMENT LIST AS FOLLOWS:
; XWD -(ARG-COUNT),0
;ARGLST: EXP ADDR OF PTR TO ARGS PASSED BY CALL
; EXP ADDR OF LOC TO STORE BASE ADDR OF 1ST ARG
; EXP ADDR OF LOC TO STORE BASE ADDR OF 2ND ARG
; ...
; EXP ADDR OF LOC TO STORE BASE ADDR OF LAST ARG
;
;NOTE: ARG-COUNT = NUMBER OF ARGS WANTED AT ENTRY PLUS 1 (FOR THE
; PTR TO THE ARGS PASSED TO THE ENTRY BY THE CALL)
;ACCUMULATORS
TA==1
TB==2
TC==3
TD==4
CA==15 ;PTR TO ARGS PASSED BY CALL
PA==16 ;ARG PTR
PP==17 ;PDL PTR
;ARG TYPES
COMP==0 ;SINGLE PRECISION BINARY
COMP1==4 ;SINGLE PRECISION FLOATING POINT
DISP==15 ;CHARACTER STRING
DBCOMP==11 ;DOUBLE PRECISION BINARY
PROC==7 ;PROCEDURE ADDRESS (ILLEGAL FOR COBOL SUBPROGRAMS)
HISEG
;ENTRY POINT -- MAIN ROUTINE
ARGS.: HLRE TC,-1(PA) ;GET ARG COUNT
JUMPGE TC,BADLST ;REQUIRE AT LEAST THE PTR TO CALLER'S ARGS
MOVE CA,@(PA) ;GET ADDR OF ARGS PASSED BY CALL
ADDI TC,1 ;GET # OF ARGS WANTED AT ENTRY
HLRE TD,-1(CA) ;GET # ARGS PASSED BY CALL
CAMLE TD,TC ;ENOUGH PASSED?
JRST NOTNUF ;NO
ARG0: AOS PA ;BUMP DUMMY ARG PTR
AOJG TC,CPOPJ ;RETURN AFTER ALL WANTED ARGS PICKED UP
MOVE TA,(CA) ;GET ARG LIST ITEM
LDB TB,[POINT 4,TA,12] ;GET TYPE CODE
CAIN TB,PROC ;PROCEDURE-NAME ARG?
JRST BADARG ;YES
TLNE TA,17 ;ANYTHING IN INDEX FIELD OF ARG PTR?
JRST IDXARG ;YES, THAT'S ILLEGAL
MOVEI TA,@TA ;CONVERT POSSIBLE INDIRECT ADDR TO DIRECT
CAIE TB,DISP ;DISPLAY ARG?
JRST ARG2 ;NO, BINARY
HRRZ TA,(TA) ;YES, GET THE BYTE PTR
ARG2: HRRZ TB,(PA) ;GET ADDR OF DUMMY ARG
HRRZM TA,(TB) ;STORE BASE ADDR OF ARG
AOJA CA,ARG0 ;BUMP ARG PTR
CPOPJ: POPJ PP, ;ALL ARGS SET UP, RETURN TO ENTRY
;ERROR MESSAGES
NOTNUF: OUTSTR [ASCIZ /?Not enough args passed to subprogram
/]
JRST KILL.##
BADARG: OUTSTR [ASCIZ /?Bad arg type passed to subprogram
/]
JRST KILL.
BADLST: OUTSTR [ASCIZ /?ARGS. called with improper arg list
/]
JRST KILL.
IDXARG: TTCALL 3,[ASCIZ "?INDEXED ARG POINTERS NOT SUPPORTED
"]
JRST KILL.
END