"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
UnboundedExternalStream subclass:#NonPositionableExternalStream
instanceVariableNames:''
classVariableNames:'StdInStream StdOutStream StdErrorStream'
poolDictionaries:''
category:'Streams-External'
!
NonPositionableExternalStream comment:'
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
$Header: /cvs/stx/stx/libbasic/Attic/NPExtStr.st,v 1.10 1994-10-28 01:25:48 claus Exp $
'!
%{
#include <stdio.h>
%}
!NonPositionableExternalStream class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
version
"
$Header: /cvs/stx/stx/libbasic/Attic/NPExtStr.st,v 1.10 1994-10-28 01:25:48 claus Exp $
"
!
documentation
"
This class provides common protocol for all non-positionable,
external streams. Concrete subclasses are terminal streams, pipe streams,
PrinterStreams, Sockets etc.
There are three special instances of this class, representing stdin,
stdout and stderr of the smalltalk/X process (see Unix manuals, if you
dont know what those are used for). These special streams are bound to
to globals Stdin, Stdout and Stderr at early initialization time
(see Smalltalk>>initializeStandardStreams).
The name of this class is a historical leftover - it should be called
'TTYStream' or similar.
"
! !
!NonPositionableExternalStream class methodsFor:'instance creation'!
forStdin
"return a NonPositionableExternalStream object for reading from
Unixes standard input file descriptor"
StdInStream isNil ifTrue:[
StdInStream := self basicNew initializeForStdin
].
^ StdInStream
!
forStdout
"return a NonPositionableExternalStream object for writing to
Unixes standard output file descriptor"
StdOutStream isNil ifTrue:[
StdOutStream := self basicNew initializeForStdout
].
^ StdOutStream
!
forStderr
"return a NonPositionableExternalStream object for writing to
Unixes standard error output file descriptor"
StdErrorStream isNil ifTrue:[
StdErrorStream := self basicNew initializeForStderr
].
^ StdErrorStream
! !
!NonPositionableExternalStream methodsFor:'printing & storing'!
printOn:aStream
"append a printed representation of the recevier on aStream"
self == Stdin ifTrue:[
aStream nextPutAll:'Stdin'.
^ self
].
self == Stdout ifTrue:[
aStream nextPutAll:'Stdout'.
^ self
].
self == Stderr ifTrue:[
aStream nextPutAll:'Stderr'.
^ self
].
super printOn:aStream
!
storeOn:aStream
"append a printed representation of the recevier on aStream, from
which the recevier can be reconstructed."
((self == Stdin)
or:[self == Stdout
or:[self == Stderr]]) ifTrue:[
^ self printOn:aStream
].
super storeOn:aStream
! !
!NonPositionableExternalStream methodsFor:'private'!
initializeForStdin
"setup for reading stdin"
mode := #readonly.
buffered := true.
%{
_INST(filePointer) = MKOBJ(stdin);
%}
!
initializeForStdout
"setup for writing to stdout"
mode := #readwrite.
buffered := false.
%{
_INST(filePointer) = MKOBJ(stdout);
%}
!
initializeForStderr
"setup for writing to stderr"
mode := #readwrite.
buffered := false.
%{
_INST(filePointer) = MKOBJ(stderr);
%}
!
reOpen
"reopen the stream after an image restart.
If I am one of the standard streams, reopen is easy"
(self == #StdInStream) ifTrue:[
^ self initializeForStdin
].
(self == #StdOutStream) ifTrue:[
^ self initializeForStdout
].
(self == #StdErrorStream) ifTrue:[
^ self initializeForStderr
].
^ super reOpen
! !