Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-01 - decus/20-0002/lepaux.sai
There is 1 other file named lepaux.sai in the archive. Click here to see a list.
COMMENT    VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY ITMNAM,SETTYPE,XITEM,NAMEITEM,COPYITEM,BTRIP,REVLST
C00004 00003	INTERNAL SIMPLE ITEMVAR PROCEDURE XITEM(STRING ID)
C00006 00004	INTERNAL ITEMVAR PROCEDURE BTRIP(ITEMVAR A,O,V)
C00007 00005	INTERNAL RECURSIVE MATCHING PROCEDURE EQVRLN(? ITEMVAR A,V1,V2)
C00008 00006	INTERNAL ITEMVAR PROCEDURE COPYITEM(ITEMVAR IV)
C00011 00007	INTERNAL PROCEDURE CPRLNS(ITEMVAR P1,P2)
C00013 ENDMK
C;

ENTRY ITMNAM,SETTYPE,XITEM,NAMEITEM,COPYITEM,BTRIP,REVLST;
BEGIN "LEPAUX"

REQUIRE "ABBREV.SAI[S,RHT]" SOURCEFILE;

IFCR DECLARATION(GLOBSW)=0 THENC DEFINE GLOBSW=0;

IFC GLOBSW THENC
	DEFINE MINGLOBALITEMNUMBER='6000;
ENDC

PRELOADWITH 
	"ANY",
	"MAINPI",
	"BINDIT",
	"EVTYPI",
	"ITEM4",
	"ITEM5",
	"ITEM6",
	"ITEM7";
OWN INTERNAL STRING ARRAY RIPNMS[0:7];

INTERNAL SIMPLE STRING PROCEDURE ITMNAM(ITEMVAR N);
	BEGIN
	STRING S;
	INTEGER I;
	IF 0#(N)<8 THEN RETURN(RIPNMS[#(N)]);
	S_CVIS(N,I);
	RETURN(IF I THEN "ITEM"&CVS(CVN(N)) ELSE S);
	END;

INTERNAL SIMPLE PROCEDURE SETTYPE(ITEMVAR FOO;INTEGER TYP);
	STARTCODE
	EXTERNAL INTEGER INFTB,GINFTB;
	MOVE	3,FOO;
	MOVE	1,TYP;
IFC GLOBSW THENC
	CAIL	1,MINGLOBALITEMNUMBER;
	SKIPA	2,GINFTB;
ENDC
	MOVE	2,INFTB;
	DPB	1,2;
	END;

! Only an expert better use this;

INTERNAL SIMPLE ITEMVAR PROCEDURE IMUNGE(ITEMVAR I;INTEGER T(1),D(0),P(0));
	BEGIN
	SETTYPE(I,T);
	(I,INTEGER)_D;
	PROPS(I)_P;
	RETURN(I);
	END;

INTERNAL LIST PROCEDURE REVLST(LIST L);
	BEGIN
	! *** this can be made much more efficient ***;
	LIST LL;
	LL_NIL;
	WHILE LENGTH(L) DO 
		PUT LOP(L) IN LL BEFORE 1;
	RETURN(LL);
	END;

INTERNAL SIMPLE ITEMVAR PROCEDURE XITEM(STRING ID);
	BEGIN
	INTEGER F;
	ITEMVAR X;
	COMMENT GENERATES AN ITEM OF THE INDICATED NAME;
	X_CVSI(ID,F);
	IF F THEN 
		BEGIN
		X_NEW;
		NEWPNAME(X,ID);
		END;
	RETURN(X);
	END;


INTERNAL SIMPLE ITEMVAR PROCEDURE NAMEITEM(ITEMVAR ITM;STRING ID);
	BEGIN
	INTEGER F;ITEMVAR I;
	IF ID THEN
		BEGIN
		I_CVSI(ID,F);
		IF F(IITM) THEN
			USERERR(CVN(I),1," ALREADY HAVE AN ITEM NAMED "&ID&" ");
		NEWPNAME(ITM,ID);
		END;
	RETURN(ITM);
	END;

INTERNAL PROCEDURE ZAPITEM(ITEMVAR IV);
	BEGIN
	ERASE IVANYANY;
	ERASE ANYIVANY;
	ERASE ANYANYIV;
	DELETE (IV);
	END;

INTERNAL ITEMVAR PROCEDURE BTRIP(ITEMVAR A,O,V);
	BEGIN
	ITEMVAR L,N;
	N_NEW;
	MAKE NN[AOV];
	L_[AOV]; ERASE NNANY;
	DELETE(N);
	RETURN( L);
	END;

INTERNAL RECURSIVE MATCHING PROCEDURE EQVRLN(? ITEMVAR A,V1,V2);
	BEGIN
	 ? A, ? V1, ? V2 | AV1V2 DO SUCCEED;
	 ? A, ? V1, ? V2 | AV2V1  (AV1V2) DO SUCCEED;
	FAIL;
	END;

INTERNAL ITEMVAR PROCEDURE COPYITEM(ITEMVAR IV);
	BEGIN 
	COMMENT RETURNS NEW(DATUM(IV));
	CASE TYPEIT(IV) OF

		BEGIN
		
	[0]	BEGIN
		USERERR(CVN(IV),1," IS A DELETED ITEM.  COPYITEM LOSES HERE");
		RETURN(NEW);
		END;

	[1]	RETURN(NEW); COMMENT UNTYPED;

	[2]	BEGIN COMMENT A BRACKETED TRIPLE;
		USERERR(CVN(IV),1,"COPYITEM DOESNT KNOW ABOUT BRACKETED TRIPLES");
		RETURN(NEW);
		END;

	[3]	RETURN(NEW(DATUM(IV,STRING)));
	[4]	RETURN(NEW(DATUM(IV,REAL)));
	[5]	RETURN(NEW(DATUM(IV,INTEGER)));
	[6]	RETURN(NEW(DATUM(IV,SET)));
	[7]	RETURN(NEW(DATUM(IV,LIST)));
	[8]	BEGIN
		ITEMVAR XX; XX_NEW;
		ASSIGN(XX,DATUM(IV));
		RETURN(XX);
		END;
	[9]	BEGIN
		USERERR(CVN(IV),1," COPYITEM LOSES FOR PROCESSES");
		RETURN(NEW);
		END;
	[10]	BEGIN
		USERERR(CVN(IV),1," COPYITEM LOSES FOR EVENTS");
		RETURN(NEW);
		END;
	[11]	BEGIN
		USERERR(CVN(IV),1," COPYITEM LOSES FOR CONTEXTS");
		RETURN(NEW);
		END;
	[12]	BEGIN
		USERERR(CVN(IV),1," COPYITEM LOSES FOR REF ITEMS");
		RETURN(NEW);
		END;
	[16]	RETURN(NEW(DATUM(IV,STRING ARRAY)));
	[17]	RETURN(NEW(DATUM(IV,REAL ARRAY)));
	[18]	RETURN(NEW(DATUM(IV,INTEGER ARRAY)));
	[19]	RETURN(NEW(DATUM(IV,SET ARRAY)));
	[20]	RETURN(NEW(DATUM(IV,LIST ARRAY)));
	[24]	BEGIN
		USERERR(CVN(IV),1," CPOYITEM LOSES FOR CONTEXT ARRAYS");
		RETURN(NEW);
		END;
	[25]
		END;

	END;


INTERNAL PROCEDURE CPRLNS(ITEMVAR P1,P2);
	BEGIN
	ITEMVAR X,Y;
	 X,Y | P1XY DO MAKE P2XY;
	 X,Y | XP1Y DO MAKE XP2Y;
	 X,Y | XYP1 DO MAKE XYP2;
	END;

INTERNAL SIMPLE ITEMVAR PROCEDURE ITPCHK(ITEMVAR I;INTEGER T);
	BEGIN
	IF TYPEIT(I)T THEN
		USERERR(1,1,"ITEMVAR "&ITMNAM(I)&" HAS TYPE "&CVS(TYPEIT(I))&
				" INSTEAD OF "&CVS(T));
	RETURN(I);
	END;

INTERNAL SIMPLE ITEMVAR PROCEDURE PRPCHK(ITEMVAR I;INTEGER P);
	BEGIN
	IF (PROPS(I) LAND P) THEN
		USERERR(1,1,"ITEMVAR "&ITMNAM(I)&" LACKS PROP "&CVOS(P));
	RETURN(I);
	END;

INTERNAL SIMPLE ITEMVAR PROCEDURE PRPON(ITEMVAR I;INTEGER P);
	BEGIN
	PROPS(I)_PROPS(I) LOR P;
	RETURN(I);
	END;

INTERNAL SIMPLE ITEMVAR PROCEDURE PRPOFF(ITEMVAR I;INTEGER P);
	BEGIN
	PROPS(I)_PROPS(I) LAND (LNOT P);
	RETURN(I);
	END;

END