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