Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-01 - decus/20-0002/iomod.sai
There is 1 other file named iomod.sai in the archive. Click here to see a list.
COMMENT    VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY WRITE,OPENFILE,REQSTR,ASK,REQINT,WRITEON,
C00007 ENDMK
C;

ENTRY WRITE,OPENFILE,REQSTR,ASK,REQINT,WRITEON,
	TYFSET,FLFSET;

BEGIN "IOMOD"

REQUIRE "ABBREV[S,RHT]" SOURCEFILE;
REQUIRE "IOMOD.HDR[S,RHT]" SOURCEFILE;

INTERNAL STRING SIMPLE PROCEDURE REQSTR(STRING REQ);
	BEGIN
	OUTSTR(REQ);
	RETURN(INCHWL);
	END;

INTERNAL BOOLEAN SIMPLE PROCEDURE ASK(STRING S);
	BEGIN
	OUTSTR(S);OUTSTR("?");
	RETURN((INCHWL LAND '137)="Y"); COMMENT turn off '40 bit;
	END;

INTERNAL INTEGER SIMPLE PROCEDURE REQINT(STRING S);RETURN(CVD(REQSTR(S)));

INTERNAL PROCEDURE OPENFILE(REFERENCE INTEGER CH;VALUE STRING FIDREQ;
		INTEGER  M,IB,OB;REFERENCE INTEGER EOFF);
	BEGIN
	INTEGER BRKR;
	INTEGER SCCT;
	SCCT_1000;
	OPEN(CH_GETCHAN,"DSK",M,IB,OB,SCCT,BRKR,EOFF);
	IF IB > 0 THEN
		BEGIN
		LOOKUP(CH,FIDREQ,EOFF);
		WHILE EOFF DO LOOKUP(CH,
			REQSTR("LOOKUP FAILED FOR  "&FIDREQ&"  FILE ="),EOFF);
		END;
	IF OB>0 THEN 
		BEGIN
		ENTER(CH,FIDREQ,EOFF);
		WHILE EOFF DO ENTER(CH,
			REQSTR("ENTER FAILED FOR "&FIDREQ&"   FILE ="),EOFF);
		END;
	END;

INTERNAL INTEGER OUCH,OEOF;
INTERNAL SIMPLE PROCEDURE WRITEON(STRING S;INTEGER OPF(0));
	BEGIN
	$PRINT(S,OPF);
	END;

INTERNAL SIMPLE PROCEDURE WRITE(STRING S;INTEGER OPF(0));
	BEGIN
	$PRINT(S,OPF);
	$PRINT(CRLF,OPF);
	END;

INTERNAL INTEGER SIMPLE PROCEDURE ISOPEN(INTEGER CH);
	STARTCODE
	EXTERNAL INTEGER CDBLOC,GOGTAB;
	LABEL XIT;
	DEFINE USER "<>"=<'15>;
	MOVE	USER,GOGTAB;
	HRRZ	1,CDBLOC(USER);
	JUMPE	1,XIT;
	ADD	1,CH;
	MOVE	1,(1);
XIT:	END;

INTERNAL SIMPLE PROCEDURE INIOUTPUT(INTEGER CTL(0);STRING FID(NULL));
	BEGIN
	INTEGER UCTL;
	EXTERNAL INTEGER PRNINF;
	USERCON(PRNINF,UCTL,0);
	IF CHNSPCON(UCTL) THEN RELEASE(UCTL LAND '777777);
	IF (CTL LAND (TTYYES+TTYNOT)) THEN
		CTL_CTL LOR (IF ASK("Output to tty") THEN TTYYES ELSE TTYNOT);
	IF (CTL LAND (CHNSPC+CHNNOT)) THEN
		BEGIN
		IF LENGTH(FID)  ASK("Output to a file") THEN
			CTL_((CTL LOR CHNSPC) LAND '777777000000)
				+ (GETCHAN LAND '777777)
		ELSE
			CTL_CTL LOR CHNNOT;
		END;
	IF CHNSPCON(CTL) THEN
		BEGIN
		IF  LENGTH(FID) THEN 
			FID_REQSTR("Output file id =");
		OUCH_CTL LAND '777777;
		OEOF_0;
		IF ISOPEN(OUCH) THEN
			OPEN(OUCH,"DSK",0,0,3,0,0,OEOF)
		ELSE
			CLOSE(OUCH);
		IF OEOF THEN USERERR(1,1,"COULDNT OPEN CHANNEL");
		ENTER(OUCH,FID,OEOF);
		WHILE OEOF DO 
			BEGIN
			OUTSTR("
Enter failed on file """&fid&"""
");
			FID_REQSTR("Output file =");
			END;
		END;
	USERCON(PRNINF,CTL,1);
	END;

INTERNAL SIMPLE PROCEDURE CLOUTPUT;
	BEGIN
	EXTERNAL INTEGER PRNINF;
	INTEGER UCTL;
	USERCON(PRNINF,UCTL,0);
	IF CHNSPCON(UCTL) THEN RELEASE(UCTL LAND '777777);
	END;

END "IOMOD"