C	CHARACTER INPUT/OUTPUT ROUTINES USING SYS$QIOW
C		AUTHOR. AL SHPUNTOFF.  SPRING SEMESTER, 1983
C 	UNIVERSITY OF NEBRASKA AT OMAHA, DEPT OF MATH & CS
C	OMAHA, NEBRASKA 68182-0243     (402) 554- 2843
C
C	THESE ROUTINES CAN BE INCLUDED INTO SOURCE CODE,
C	OR COMPILED AND PLACED IN LIBRARIES.  
C	READ1 AND WRIT1 TRANSFER ONE CHARACTER BETWEEN USER-SCREEN
C   	AND PROGRAM.  NO ECHO & FULL TRANSPARENCY.
C	READM AND WRITM TRANSFER A SPECIFIED NUMBER OF CHARACTERS
C	ALL RETURN AN INTEGER RETURN CODE TO THE USER-PROGRAM.
C
C	USERS SHOULD BE AWARE THAT CTRL-Y IS PASSED THROUGH THIS
C	ROUTINE, AS ARE ALL OTHER CONTROL SEQUENCES, HENCE THESE
C	CAN BE USED TO SEND ANY CONTROL SEQUENCE TO A TERMINAL,
C	STANDARD OR GRAPHICS.
C	CARRIAGE-RETURNS ARE NOT APPENDED TO EITHER THE BEGINNING
C	OR END OF THE STRING.
	INTEGER FUNCTION READM(CHARS,INSIZ)
	implicit integer*4(S)
	COMMON/NGPXL/ CHANL, FREAD,FWRITE
	INTEGER*4  FREAD,FWRITE,INSIZ
	INTEGER*2 IOSB(4),CHANL
	CHARACTER*(*) CHARS
	IF(CHANL.EQ.0)CALL SETNGPXL	
	READM=SYS$QIOW(,%VAL(CHANL),%VAL(FREAD),IOSB,,,%REF(CHARS),
	1 %VAL(INSIZ),,,,,)    !READ CHARACTERS AS ENTERED
	RETURN
	END
	INTEGER FUNCTION WRITM(CHARS,OUTSIZ)
		implicit integer*4(S)
	COMMON/NGPXL/ CHANL, FREAD,FWRITE
	INTEGER*4  FREAD,FWRITE,OUTSIZ
	INTEGER*2 IOSB(4),CHANL
	CHARACTER*(*) CHARS
	IF(CHANL.EQ.0)CALL SETNGPXL
	WRITM=SYS$QIOW(,%VAL(CHANL),%VAL(FWRITE),IOSB,,,%REF(CHARS),
	1 %VAL(OUTSIZ),,,,,)
	RETURN
	END
	INTEGER FUNCTION READ1(CHAR)
		implicit integer*4(S)
	COMMON/NGPXL/ CHANL, FREAD,FWRITE
	INTEGER*4  FREAD,FWRITE
	INTEGER*2 IOSB(4),CHANL
	CHARACTER*1 CHAR
	IF(CHANL.EQ.0)CALL SETNGPXL
	READ1=SYS$QIOW(,%VAL(CHANL),%VAL(FREAD),IOSB,,,%REF(CHAR),
	1 %VAL(1),,,,,)    !READ CHARACTER AS ENTERED
	RETURN
	END
	INTEGER FUNCTION WRIT1(CHAR)
		implicit integer*4(S)
	COMMON/NGPXL/ CHANL, FREAD,FWRITE
	INTEGER*4  FREAD,FWRITE
	INTEGER*2 IOSB(4),CHANL
	CHARACTER*1 CHAR
	IF(CHANL.EQ.0)CALL SETNGPXL
	WRIT1=SYS$QIOW(,%VAL(CHANL),%VAL(FWRITE),IOSB,,,%REF(CHAR),
	1 %VAL(1),,,,,)
	RETURN
	END
	BLOCK DATA
	COMMON/NGPXL/CHANL,FREAD,FWRITE
	INTEGER*2 CHANL
	INTEGER*4 FREAD,FWRITE
	DATA CHANL/0/
	END
	SUBROUTINE SETNGPXL
		implicit integer*4(S)
	COMMON/NGPXL/ CHANL, FREAD,FWRITE
	INTEGER*4  FREAD,FWRITE
	INTEGER*2 CHANL
	CHARACTER*1 CHAR
	EXTERNAL IO$M_NOFORMAT,IO$_WRITEVBLK,IO$M_NOECHO,IO$_TTYREADALL
	I=SYS$ASSIGN('TT',CHANL,,)
	FWRITE = %LOC(IO$M_NOFORMAT) .OR. %LOC(IO$_WRITEVBLK)
	FREAD = %LOC(IO$M_NOECHO) .OR. %LOC(IO$_TTYREADALL)
	RETURN
	END
