terminals/extensions.sav
author Martin Kobetic
Sun, 17 Nov 2013 00:23:18 -0500
changeset 147 bd6be28aa924
parent 52 a1363827b596
permissions -rw-r--r--
merging

"{ Encoding: utf8 }" !
"{ Package: 'stx:goodies/xtreams/terminals' }" !

!UndefinedObject methodsFor:'converting'!

writing
        ^Xtreams::NullWriteStream new
! !

!PipeStream methodsFor:'converting'!

reading

    ^Xtreams::ExternalReadStream on: self
! !

!PipeStream methodsFor:'converting'!

writing

    ^Xtreams::ExternalWriteStream on: self
! !

!PipeStream methodsFor:'testing'!

isActive

    ^self isOpen
! !

!Block methodsFor:'xtreams'!

reading
        self numArgs = 0 ifTrue: [^Xtreams::BlockClosureReadStream on: self].
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureGenerateStream on: self].
        self error: 'More arguments than we can poke a stick at!!'
! !

!Block methodsFor:'xtreams'!

writing
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureWriteStream on: self].
        self error: 'Must be a single argument block.'
! !

!Socket methodsFor:'converting'!

accepting
	"Return a read stream that produces new sockets from incoming connections."

	"^	ReadStream"

	"Listen for connections and close those connections immediately.
	| socket |
	socket := SocketAccessor newTCP.
	socket listenFor: 1.
	[socket acceping do: [:client | client close]]
		ensure: [socket close]
	"

	^[self accept] reading
		closeBlock: [self close];
		yourself
! !

!Socket methodsFor:'converting'!

reading
        ^Xtreams::ExternalReadStream on: self
! !

!Socket methodsFor:'converting'!

writing
        ^Xtreams::ExternalWriteStream on: self
! !

!SharedQueue methodsFor:'converting'!

reading
        ^Xtreams::SharedQueueReadStream on: self
! !

!SharedQueue methodsFor:'converting'!

writing
        ^Xtreams::SharedQueueWriteStream on: self
! !

!Filename methodsFor:'converting'!

appending
        ^(OperatingSystem open: self osNameForAccess attributes: #(O_APPEND O_CREAT) mode: nil) writing
                position: self fileSize;
                isPositionable: false;
                yourself
! !

!Filename methodsFor:'converting'!

reading
        self isDirectory ifFalse: [^(OperatingSystem open: self osNameForAccess attributes: #(O_RDONLY) mode: nil) reading].

        "Return the directory contents as a stream of filenames"
        ^([self directoryContents]
                on:     Error
                do:     [:ex | ex return: #()])
                        reading collecting: [:each | self construct: each asFilename]
! !

!Filename methodsFor:'converting'!

writing
    ^(OperatingSystem open: self osNameForAccess attributes: #(O_WRONLY | O_CREAT) mode: nil) writing
! !

!SequenceableCollection methodsFor:'converting'!

reading
        ^Xtreams::SequenceableCollectionReadStream on: self
! !

!SequenceableCollection methodsFor:'converting'!

writing
        ^Xtreams::SequenceableCollectionWriteStream on: self
! !

!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!

writing

    ^Xtreams::FileWriteStream on: self
! !

!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!

reading

    ^Xtreams::FileReadStream on: self
! !

!Collection methodsFor:'converting'!

writing
        ^Xtreams::CollectionWriteStream on: self
! !

!Xtreams::Buffer methodsFor:'converting'!

reading
	^BufferReadStream on: self
! !

!Xtreams::Buffer methodsFor:'converting'!

writing
	^BufferWriteStream on: self
! !

!Xtreams::WriteStream methodsFor:'transforming'!

buffering: bufferSize
	"Delays committing its content to its underlying stream until it has reached a certain size ,#flush is sent, or the stream is closed."
	"       bufferSize      <Integer> The size of the buffer to start with.
		^<PositionWriteStream>"
	"
		(ByteArray new writing buffering: 5)
			write: (ByteArray withAll: (1 to: 11));
			conclusion
	"
	^BufferedWriteStream on: self bufferSize: bufferSize
! !

!Random methodsFor:'converting'!

reading
	^[self next] reading
		contentsSpecies: self contentsSpecies;
		yourself
! !