Trailing-Edge
-
PDP-10 Archives
-
BB-H580E-SB_1985
-
args.mac
There are 7 other files named args.mac in the archive.  Click here to see a list.
TITLE	ARGS FOR LIBOL V12C
SUBTTL	PICK UP ARGUMENTS FOR SUBPROGRAM ENTRY		CHUCK MCCOMAS
	SEARCH COPYRT
	SALL
COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1974, 1985
;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.
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
	.COPYRIGHT		;Put standard copyright statement in REL file
;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