Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/libsim/fronts.mac
There is 1 other file named fronts.mac in the archive. Click here to see a list.
COMMENT * SIMULA specification;

OPTIONS(/E:QUICK,frontstrip);

TEXT PROCEDURE frontstrip(t); TEXT t;

! IF t=/=NOTEXT THEN
! BEGIN COMMENT return t.Sub(n+1,t.Length-n), where
!	t.Sub(1,n).Strip==NOTEXT;
!
!	t.Setpos(1);
!	WHILE t.More DO
!	IF t.Getchar NE ' ' THEN
!	BEGIN
!		frontstrip:- t.Sub(t.Pos-1,t.Length-t.Pos+2);
!		t.Setpos(0);
!	END;
! END	frontstrip;

COMMENT *;! MACRO-10 code *;!

	TITLE	frontstrip
	ENTRY	frontstrip
	sall
	SUBTTL	SIMULA utility, Lars Enderin Sept 1975

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

	search	simmcr,simmac
	macinit

frontstrip:
	PROC
	EXCH	XWAC1,(XTAC)
	JUMPE	XWAC1,L9	;! NOTEXT
	EXCH	XWAC2,1(XTAC)
	STACK	XTAC
	LF	X1,ZTVSP(,XWAC1)
	IF	;! Start pos = 0
		JUMPN	X1,FALSE
	THEN	;! Get byte pointer easily
		SETZ	X2,
	ELSE
		IDIVI	X1,5
	FI
	ADDI	X1,2(XWAC1)
	LF	XIAC,ZTVLNG(,XWAC1)
	CAIGE	XIAC,5
	GOTO	L2
	L	(X1)
	SKIPE	X2
	AND	mask1(X2)
	XOR	blankw(X2)
	IF	;! all blanks
		JUMPN	FALSE
	THEN	ADDI	XIAC,(X2)
		SETZ	X2,
		ADDI	X1,1
		LOOP
			SUBI	XIAC,5	;! Account for one word
			L	(X1)
		AS
			CAME	blankw
			GOTO	FALSE
			CAIL	XIAC,5
			AOJA	X1,TRUE
		SA
	FI
	IF	;! There's more
		JUMPLE	XIAC,FALSE
	THEN	;!Check next word
L2():!		HLL	X1,ptab(X2)
		LOOP
			ILDB	X1
		AS	CAIN	" "
			SOJG	XIAC,TRUE
		SA
		IF	;! Non-blanks still left
			JUMPLE	XIAC,FALSE
		THEN	;! Compute text pointer to the rest
			LF	X1,ZTVLNG(,XWAC1)
			SUBI	X1,(XIAC)
			MOVSI	X1,(X1)
			SUB	XWAC2,X1	;! New length
			HLLZS	XWAC2		;! Setpos(1)
			ADD	XWAC1,X1	;! New offset
		ELSE	;! NOTEXT
			SETZB	XWAC1,XWAC2
		FI
	ELSE	;! NOTEXT
		SETZB	XWAC1,XWAC2
	FI
	UNSTK	XTAC
	EXCH	XWAC2,1(XTAC)
L9():!	EXCH	XWAC1,(XTAC)
	RETURN
	EPROC

mask1=.-1
	BYTE	(7) 0,-1,-1,-1,-1(1) 0
	BYTE	(7) 0, 0,-1,-1,-1(1) 0
	BYTE	(7) 0, 0, 0,-1,-1(1) 0
	BYTE	(7) 0, 0, 0, 0,-1(1) 0

blankw:	ASCII	/     /
	BYTE	(7) 0," "," "," "," "(1)0
	BYTE	(7) 0,  0," "," "," "(1)0
	BYTE	(7) 0,  0,  0," "," "(1)0
	BYTE	(7) 0,  0,  0,  0," "(1)0

ptab:	POINT	7,2,-1
	POINT	7,2,06
	POINT	7,2,13
	POINT	7,2,20
	POINT	7,2,27
	POINT	7,2,34

	END;