info-vax@ucbvax.ARPA (03/24/85)
From: Rudy.Nedved@CMU-CS-A.ARPA Is there a way to tell VMS to treat normal SYS$INPUT, SYS$OUTPUT and SYS$ERROR as one character block sequential device so that a $GET and a $PUT of one character gets the character(s) typed and does not wait until EOL or control characters are typed. I can't change the library that I am using to use QIOWs on the terminal and I have the terminal in PASSALL/NOECHO....but it still waits for new-line or a control character. Thanks, -Rudy
info-vax@ucbvax.ARPA (03/29/85)
From: geacc022%timevx@cit-hamlet.arpa >>Is there a way to tell VMS to treat normal SYS$INPUT, SYS$OUTPUT and >>SYS$ERROR as one character block sequential device so that a $GET >>and a $PUT of one character gets the character(s) typed and does not >>wait until EOL or control characters are typed. >Use "QIO" instead of "QIOW". It will stop reading when enough characters >have been read. Wrong! $QIO waits for no man -- it returns immediately after queueing the I/O request. (It's used for asyncronous I/O; presumably you use an event flag or a nASTy routine to detect I/O completion.) $QIOW is simply a $QIO followed by a $WAITFR. You can get RMS to do this, but not with the $GET service -- you must use the $READ service (specifying the BIO bit in the FAB's FAC and the RAB's ROP). Specify that you have a one-byte buffer and things will work. The RNE and RNF bits in the ROP field are ignored, but you say the terminal is already set /NOECHO/PASSALL, so that's OK. (RNE = read no echo; RNF = read no filter). When I looked at how our library here does it, we use $QIOWs with the terminator set set to -1's (every character is end of line). It can also be done by reading into a 1-byte buffer. Caveat: We're still running VMS 3.6 here; but I can't imagine things have changed all that much for V4. (although I hope they fixed it so the RNE/RNF bits are processed by $READ). Gary Ansok GEACC022%TIMEVX @ HAMLET GEA @ CALTECH.BITNET ...ucbvax!cithep!timevx#geacc022 "All the world loves a straight man."