Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/libsim/scanin.mac
There is 1 other file named scanin.mac in the archive. Click here to see a list.
COMMENT * SIMULA specification;
OPTIONS(/E:CODE,scanint);
INTEGER PROCEDURE scanint(t);    NAME t;    TEXT t;

COMMENT Starting at t.Pos, scanint finds the next integer item and returns its
value. T.Pos is moved past the item, except if no legal item is found.
In that case, scanint returns minint, the algebraically lowest value: -2^35.
;

!*;! MACRO-10 code !*;!

	TITLE	scanint
	ENTRY	scanint
	SUBTTL	SIMULA utility, Lars Enderin Dec 1975

;!*** Copyright 1975 by the Swedish Defence Research Institute. ***
;!*** Copying is allowed.					***


	sall
	search	simmac,simmcr,simrpa
	macinit

	;! Local definitions ;!

	result==ZBI%S
	t==result+1

scanint:PROC
	LI	XTAC,TXGI
	BRANCH	.scan
	EPROC
;! INTEGER/LONG REAL PROCEDURE .scan(t,pf);!
;! NAME t;! TEXT t;! INTEGER/LONG REAL PROCEDURE pf;!

	ENTRY	.scan
.scan:	PROC
	ST	XTAC,result(XCB)	;! Proc address
	LI	XWAC1,t
	CAIN	XTAC,TXGR
	LI	XWAC1,t+1
	HRLI	XWAC1,(XCB)
	EXEC	PHFT
	XWD	0,0
	HLRZ	XWAC3,XWAC1
	ADDI	XWAC3,(XWAC1)
	HRLZ	1(XWAC3)	;! Pos
	LD	XWAC5,(XWAC3)	;! Save old text variable
	ADDM	(XWAC3)		;! Compute rest
	MOVN
	ADDM	1(XWAC3)
	ZF	ZTVCP(XWAC3)	;! Pos:=1
	LI	XWAC1,(XWAC3)
	HRROI	XTAC,XWAC1
	PUSHJ	XPDP,@result(XCB)	;! Call get... proc
	IF	;! Error return
		JUMPL	XTAC,FALSE
	THEN	;! Result = -2^35
		MOVSI	XWAC1,400000
		SETZ	XWAC2,
	ELSE	;! Account for item by moving pos
		LF	,ZTVCP(XWAC3)
		ADDM	XWAC6
	FI
	STD	XWAC5,(XWAC3)	;! Old text var with new pos
	L	result(XCB)
	CAIN	TXGR
	ST	XWAC2,1+result(XCB)
	ST	XWAC1,result(XCB)
	BRANCH	CSEP
	EPROC

	LIT
	END;