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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43
mkobetic
parents: 39
diff changeset
     1
"{ Encoding: utf8 }" !
mkobetic
parents: 39
diff changeset
     2
"{ Package: 'stx:goodies/xtreams/terminals' }" !
mkobetic
parents: 39
diff changeset
     3
mkobetic
parents: 39
diff changeset
     4
!UndefinedObject methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
     5
mkobetic
parents: 39
diff changeset
     6
writing
mkobetic
parents: 39
diff changeset
     7
        ^Xtreams::NullWriteStream new
mkobetic
parents: 39
diff changeset
     8
! !
mkobetic
parents: 39
diff changeset
     9
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    10
!PipeStream methodsFor:'converting'!
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    11
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    12
reading
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    13
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    14
    ^Xtreams::ExternalReadStream on: self
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    15
! !
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    16
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    17
!PipeStream methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    18
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    19
writing
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    20
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    21
    ^Xtreams::ExternalWriteStream on: self
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    22
! !
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    23
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    24
!PipeStream methodsFor:'testing'!
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    25
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    26
isActive
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    27
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
    28
    ^self isOpen
43
mkobetic
parents: 39
diff changeset
    29
! !
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    30
43
mkobetic
parents: 39
diff changeset
    31
!Block methodsFor:'xtreams'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    32
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    33
reading
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    34
        self numArgs = 0 ifTrue: [^Xtreams::BlockClosureReadStream on: self].
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    35
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureGenerateStream on: self].
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    36
        self error: 'More arguments than we can poke a stick at!!'
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    37
! !
43
mkobetic
parents: 39
diff changeset
    38
mkobetic
parents: 39
diff changeset
    39
!Block methodsFor:'xtreams'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    40
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    41
writing
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    42
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureWriteStream on: self].
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    43
        self error: 'Must be a single argument block.'
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    44
! !
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    45
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    46
!Socket methodsFor:'converting'!
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    47
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    48
accepting
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    49
	"Return a read stream that produces new sockets from incoming connections."
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    50
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    51
	"^	ReadStream"
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    52
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    53
	"Listen for connections and close those connections immediately.
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    54
	| socket |
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    55
	socket := SocketAccessor newTCP.
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    56
	socket listenFor: 1.
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    57
	[socket acceping do: [:client | client close]]
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    58
		ensure: [socket close]
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    59
	"
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    60
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    61
	^[self accept] reading
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    62
		closeBlock: [self close];
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    63
		yourself
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    64
! !
43
mkobetic
parents: 39
diff changeset
    65
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    66
!Socket methodsFor:'converting'!
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    67
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    68
reading
43
mkobetic
parents: 39
diff changeset
    69
        ^Xtreams::ExternalReadStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    70
! !
43
mkobetic
parents: 39
diff changeset
    71
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    72
!Socket methodsFor:'converting'!
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    73
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    74
writing
43
mkobetic
parents: 39
diff changeset
    75
        ^Xtreams::ExternalWriteStream on: self
mkobetic
parents: 39
diff changeset
    76
! !
mkobetic
parents: 39
diff changeset
    77
mkobetic
parents: 39
diff changeset
    78
!SharedQueue methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
    79
mkobetic
parents: 39
diff changeset
    80
reading
mkobetic
parents: 39
diff changeset
    81
        ^Xtreams::SharedQueueReadStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    82
! !
43
mkobetic
parents: 39
diff changeset
    83
mkobetic
parents: 39
diff changeset
    84
!SharedQueue methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
    85
mkobetic
parents: 39
diff changeset
    86
writing
mkobetic
parents: 39
diff changeset
    87
        ^Xtreams::SharedQueueWriteStream on: self
mkobetic
parents: 39
diff changeset
    88
! !
mkobetic
parents: 39
diff changeset
    89
mkobetic
parents: 39
diff changeset
    90
!Filename methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
    91
mkobetic
parents: 39
diff changeset
    92
appending
mkobetic
parents: 39
diff changeset
    93
        ^(OperatingSystem open: self osNameForAccess attributes: #(O_APPEND O_CREAT) mode: nil) writing
mkobetic
parents: 39
diff changeset
    94
                position: self fileSize;
mkobetic
parents: 39
diff changeset
    95
                isPositionable: false;
mkobetic
parents: 39
diff changeset
    96
                yourself
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
    97
! !
43
mkobetic
parents: 39
diff changeset
    98
mkobetic
parents: 39
diff changeset
    99
!Filename methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
   100
mkobetic
parents: 39
diff changeset
   101
reading
mkobetic
parents: 39
diff changeset
   102
        self isDirectory ifFalse: [^(OperatingSystem open: self osNameForAccess attributes: #(O_RDONLY) mode: nil) reading].
mkobetic
parents: 39
diff changeset
   103
mkobetic
parents: 39
diff changeset
   104
        "Return the directory contents as a stream of filenames"
mkobetic
parents: 39
diff changeset
   105
        ^([self directoryContents]
mkobetic
parents: 39
diff changeset
   106
                on:     Error
mkobetic
parents: 39
diff changeset
   107
                do:     [:ex | ex return: #()])
mkobetic
parents: 39
diff changeset
   108
                        reading collecting: [:each | self construct: each asFilename]
mkobetic
parents: 39
diff changeset
   109
! !
mkobetic
parents: 39
diff changeset
   110
mkobetic
parents: 39
diff changeset
   111
!Filename methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
   112
mkobetic
parents: 39
diff changeset
   113
writing
mkobetic
parents: 39
diff changeset
   114
    ^(OperatingSystem open: self osNameForAccess attributes: #(O_WRONLY | O_CREAT) mode: nil) writing
mkobetic
parents: 39
diff changeset
   115
! !
mkobetic
parents: 39
diff changeset
   116
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   117
!SequenceableCollection methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   118
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   119
reading
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   120
        ^Xtreams::SequenceableCollectionReadStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   121
! !
43
mkobetic
parents: 39
diff changeset
   122
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   123
!SequenceableCollection methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   124
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   125
writing
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   126
        ^Xtreams::SequenceableCollectionWriteStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   127
! !
43
mkobetic
parents: 39
diff changeset
   128
mkobetic
parents: 39
diff changeset
   129
!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!
mkobetic
parents: 39
diff changeset
   130
mkobetic
parents: 39
diff changeset
   131
writing
mkobetic
parents: 39
diff changeset
   132
mkobetic
parents: 39
diff changeset
   133
    ^Xtreams::FileWriteStream on: self
mkobetic
parents: 39
diff changeset
   134
! !
mkobetic
parents: 39
diff changeset
   135
mkobetic
parents: 39
diff changeset
   136
!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!
mkobetic
parents: 39
diff changeset
   137
mkobetic
parents: 39
diff changeset
   138
reading
mkobetic
parents: 39
diff changeset
   139
mkobetic
parents: 39
diff changeset
   140
    ^Xtreams::FileReadStream on: self
mkobetic
parents: 39
diff changeset
   141
! !
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   142
43
mkobetic
parents: 39
diff changeset
   143
!Collection methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
   144
mkobetic
parents: 39
diff changeset
   145
writing
mkobetic
parents: 39
diff changeset
   146
        ^Xtreams::CollectionWriteStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   147
! !
43
mkobetic
parents: 39
diff changeset
   148
52
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   149
!Xtreams::Buffer methodsFor:'converting'!
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   150
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   151
reading
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   152
	^BufferReadStream on: self
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   153
! !
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   154
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   155
!Xtreams::Buffer methodsFor:'converting'!
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   156
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   157
writing
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   158
	^BufferWriteStream on: self
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   159
! !
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   160
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   161
!Xtreams::WriteStream methodsFor:'transforming'!
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   162
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   163
buffering: bufferSize
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   164
	"Delays committing its content to its underlying stream until it has reached a certain size ,#flush is sent, or the stream is closed."
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   165
	"       bufferSize      <Integer> The size of the buffer to start with.
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   166
		^<PositionWriteStream>"
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   167
	"
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   168
		(ByteArray new writing buffering: 5)
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   169
			write: (ByteArray withAll: (1 to: 11));
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   170
			conclusion
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   171
	"
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   172
	^BufferedWriteStream on: self bufferSize: bufferSize
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   173
! !
a1363827b596 packaging
mkobetic
parents: 43
diff changeset
   174
43
mkobetic
parents: 39
diff changeset
   175
!Random methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   176
43
mkobetic
parents: 39
diff changeset
   177
reading
mkobetic
parents: 39
diff changeset
   178
	^[self next] reading
mkobetic
parents: 39
diff changeset
   179
		contentsSpecies: self contentsSpecies;
mkobetic
parents: 39
diff changeset
   180
		yourself
39
80fdc4602b14 sockets and files
mkobetic
parents:
diff changeset
   181
! !
43
mkobetic
parents: 39
diff changeset
   182