DIRECTORY UnixFileDescriptorStream, RefText, IO, UnixErrno, UnixSysCalls, UnixSysCallExtensions, UnixTypes; UnixFileDescriptorStreamImpl: CEDAR PROGRAM IMPORTS IO, UnixSysCalls EXPORTS UnixFileDescriptorStream ~ BEGIN Data: TYPE = RECORD [ fd: UnixTypes.FileDescriptor ]; DataHandle: TYPE = REF Data; Create: PUBLIC PROC [ fd: UnixTypes.FileDescriptor] RETURNS [IO.STREAM] = { selfData: DataHandle = NEW [ Data ¬ [ fd: fd ] ]; RETURN [IO.CreateStream[procs, selfData]]; }; CharsAvail: PROC [self: IO.STREAM, wait: BOOL ¬ FALSE] RETURNS [INT] ~ { selfData: DataHandle = NARROW[self.streamData]; selected: INT; fds: UnixTypes.PollFD; fds.fd ¬ selfData.fd; fds.events.in ¬ UnixTypes.Flag.true; TRUSTED { selected ¬ UnixSysCalls.Poll[ fds: @fds, nfds: 1, timeout: 0] }; RETURN[ IF (fds.revents.in = UnixTypes.Flag.true) THEN 1 ELSE 0 ]; }; SetTerminalSize: PUBLIC PROC [self: IO.STREAM, r,c: INT] ~ { selfData: DataHandle = NARROW[self.streamData]; result: UnixTypes.SysCallResult; TCSETSW: INT = LOOPHOLE[ 80087467H ]; winsize: WORD16 MACHINE DEPENDENT RECORD [ wsRow(0): CARD16, wsCol(1): CARD16, wsXpixel(2): CARD16, wsYpixel(3): CARD16 ]; winsize.wsRow ¬ r; winsize.wsCol ¬ c; TRUSTED { result ¬ UnixSysCalls.IOCtl[ d: selfData.fd, request: TCSETSW, argp: LOOPHOLE[@winsize] ] }; }; SetFD: PUBLIC PROC [self: IO.STREAM, fd: UnixTypes.FileDescriptor] ~ { selfData: DataHandle = NARROW[self.streamData]; selfData.fd ¬ fd; }; procs: REF IO.StreamProcs = IO.CreateStreamProcs [ variety: $input, class: $plumberHack, charsAvail: CharsAvail ]; END. ² UnixFileDescriptorStreamImpl Copyright Σ 1992 by Xerox Corporation. All rights reserved. Norman Adams, February 23, 1990 2:59 pm PST Willie-s, June 12, 1992 2:44 pm PDT Κ†•NewlineDelimiter –(cedarcode) style™šœ™Jšœ Οeœ1™