terminals/extensions.st
author mkobetic
Mon, 30 Jan 2012 23:01:24 +0000
changeset 78 a9dd8b69b39f
parent 43 b9a077d6ce14
child 96 85e395d8e3d7
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
78
mkobetic
parents: 43
diff changeset
     1
"{ Package: 'stx:goodies/xtreams/terminals' }"
mkobetic
parents: 43
diff changeset
     2
mkobetic
parents: 43
diff changeset
     3
!
mkobetic
parents: 43
diff changeset
     4
mkobetic
parents: 43
diff changeset
     5
!Block methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
     6
78
mkobetic
parents: 43
diff changeset
     7
reading
mkobetic
parents: 43
diff changeset
     8
        self numArgs = 0 ifTrue: [^Xtreams::BlockClosureReadStream on: self].
mkobetic
parents: 43
diff changeset
     9
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureGenerateStream on: self].
mkobetic
parents: 43
diff changeset
    10
        self error: 'More arguments than we can poke a stick at!!'
mkobetic
parents: 43
diff changeset
    11
! !
mkobetic
parents: 43
diff changeset
    12
!Block methodsFor:'converting'!
mkobetic
parents: 43
diff changeset
    13
mkobetic
parents: 43
diff changeset
    14
writing
mkobetic
parents: 43
diff changeset
    15
        self numArgs = 1 ifTrue: [^Xtreams::BlockClosureWriteStream on: self].
mkobetic
parents: 43
diff changeset
    16
        self error: 'Must be a single argument block.'
mkobetic
parents: 43
diff changeset
    17
! !
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
78
mkobetic
parents: 43
diff changeset
    21
        ^Xtreams::CollectionWriteStream on: self
mkobetic
parents: 43
diff changeset
    22
! !
mkobetic
parents: 43
diff changeset
    23
!Filename methodsFor:'converting'!
mkobetic
parents: 43
diff changeset
    24
mkobetic
parents: 43
diff changeset
    25
appending
mkobetic
parents: 43
diff changeset
    26
        ^(OperatingSystem open: self osNameForAccess attributes: #(O_APPEND O_CREAT) mode: nil) writing
mkobetic
parents: 43
diff changeset
    27
                position: self fileSize;
mkobetic
parents: 43
diff changeset
    28
                isPositionable: false;
mkobetic
parents: 43
diff changeset
    29
                yourself
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
    30
! !
78
mkobetic
parents: 43
diff changeset
    31
!Filename methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
    32
78
mkobetic
parents: 43
diff changeset
    33
reading
mkobetic
parents: 43
diff changeset
    34
        self isDirectory ifFalse: [^(OperatingSystem open: self osNameForAccess attributes: #(O_RDONLY) mode: nil) reading].
mkobetic
parents: 43
diff changeset
    35
mkobetic
parents: 43
diff changeset
    36
        "Return the directory contents as a stream of filenames"
mkobetic
parents: 43
diff changeset
    37
        ^([self directoryContents]
mkobetic
parents: 43
diff changeset
    38
                on:     Error
mkobetic
parents: 43
diff changeset
    39
                do:     [:ex | ex return: #()])
mkobetic
parents: 43
diff changeset
    40
                        reading collecting: [:each | self construct: each asFilename]
mkobetic
parents: 43
diff changeset
    41
! !
mkobetic
parents: 43
diff changeset
    42
!Filename methodsFor:'converting'!
mkobetic
parents: 43
diff changeset
    43
mkobetic
parents: 43
diff changeset
    44
writing
mkobetic
parents: 43
diff changeset
    45
    ^(OperatingSystem open: self osNameForAccess attributes: #(O_WRONLY | O_CREAT) mode: nil) writing
mkobetic
parents: 43
diff changeset
    46
! !
mkobetic
parents: 43
diff changeset
    47
!PipeStream methodsFor:'testing'!
mkobetic
parents: 43
diff changeset
    48
mkobetic
parents: 43
diff changeset
    49
isActive
mkobetic
parents: 43
diff changeset
    50
mkobetic
parents: 43
diff changeset
    51
    ^self isOpen
mkobetic
parents: 43
diff changeset
    52
! !
43
mkobetic
parents: 39
diff changeset
    53
!PipeStream methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
    54
mkobetic
parents: 39
diff changeset
    55
reading
mkobetic
parents: 39
diff changeset
    56
mkobetic
parents: 39
diff changeset
    57
    ^Xtreams::ExternalReadStream on: self
mkobetic
parents: 39
diff changeset
    58
! !
mkobetic
parents: 39
diff changeset
    59
!PipeStream methodsFor:'converting'!
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    60
43
mkobetic
parents: 39
diff changeset
    61
writing
mkobetic
parents: 39
diff changeset
    62
mkobetic
parents: 39
diff changeset
    63
    ^Xtreams::ExternalWriteStream on: self
mkobetic
parents: 39
diff changeset
    64
! !
78
mkobetic
parents: 43
diff changeset
    65
!Random methodsFor:'converting'!
43
mkobetic
parents: 39
diff changeset
    66
78
mkobetic
parents: 43
diff changeset
    67
reading
mkobetic
parents: 43
diff changeset
    68
	^[self next] reading
mkobetic
parents: 43
diff changeset
    69
		contentsSpecies: self contentsSpecies;
mkobetic
parents: 43
diff changeset
    70
		yourself
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
    71
! !
78
mkobetic
parents: 43
diff changeset
    72
!SequenceableCollection methodsFor:'converting'!
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    73
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    74
reading
78
mkobetic
parents: 43
diff changeset
    75
        ^Xtreams::SequenceableCollectionReadStream on: self
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    76
! !
78
mkobetic
parents: 43
diff changeset
    77
!SequenceableCollection methodsFor:'converting'!
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    78
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    79
writing
78
mkobetic
parents: 43
diff changeset
    80
        ^Xtreams::SequenceableCollectionWriteStream on: self
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    81
! !
78
mkobetic
parents: 43
diff changeset
    82
!SharedQueue methodsFor:'converting'!
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    83
78
mkobetic
parents: 43
diff changeset
    84
reading
mkobetic
parents: 43
diff changeset
    85
        ^Xtreams::SharedQueueReadStream on: self
mkobetic
parents: 43
diff changeset
    86
! !
mkobetic
parents: 43
diff changeset
    87
!SharedQueue methodsFor:'converting'!
mkobetic
parents: 43
diff changeset
    88
mkobetic
parents: 43
diff changeset
    89
writing
mkobetic
parents: 43
diff changeset
    90
        ^Xtreams::SharedQueueWriteStream on: self
mkobetic
parents: 43
diff changeset
    91
! !
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    92
!Socket methodsFor:'converting'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    93
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    94
accepting
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    95
	"Return a read stream that produces new sockets from incoming connections."
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    96
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    97
	"^	ReadStream"
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    98
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
    99
	"Listen for connections and close those connections immediately.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   100
	| socket |
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   101
	socket := SocketAccessor newTCP.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   102
	socket listenFor: 1.
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   103
	[socket acceping do: [:client | client close]]
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   104
		ensure: [socket close]
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   105
	"
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   106
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   107
	^[self accept] reading
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   108
		closeBlock: [self close];
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   109
		yourself
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   110
! !
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   111
!Socket methodsFor:'converting'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   112
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   113
reading
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   114
        ^Xtreams::ExternalReadStream on: self
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   115
! !
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   116
!Socket methodsFor:'converting'!
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   117
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   118
writing
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   119
        ^Xtreams::ExternalWriteStream on: self
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   120
! !
78
mkobetic
parents: 43
diff changeset
   121
!TextCollector methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   122
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   123
writing
78
mkobetic
parents: 43
diff changeset
   124
	^[:object | self nextPut: object] writing
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   125
! !
78
mkobetic
parents: 43
diff changeset
   126
!UndefinedObject methodsFor:'converting'!
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   127
78
mkobetic
parents: 43
diff changeset
   128
writing
mkobetic
parents: 43
diff changeset
   129
        ^Xtreams::NullWriteStream new
9
6c90659cf105 first cut
Martin Kobetic <mkobetic@gmail.com>
parents:
diff changeset
   130
! !
78
mkobetic
parents: 43
diff changeset
   131
!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   132
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   133
reading
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   134
78
mkobetic
parents: 43
diff changeset
   135
    ^Xtreams::FileReadStream on: self
39
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   136
! !
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   137
!UnixOperatingSystem::FileDescriptorHandle methodsFor:'xtreams'!
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   138
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   139
writing
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   140
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   141
    ^Xtreams::FileWriteStream on: self
80fdc4602b14 sockets and files
mkobetic
parents: 16
diff changeset
   142
! !
43
mkobetic
parents: 39
diff changeset
   143
!Xtreams::Buffer methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
   144
mkobetic
parents: 39
diff changeset
   145
reading
mkobetic
parents: 39
diff changeset
   146
	^BufferReadStream on: self
mkobetic
parents: 39
diff changeset
   147
! !
mkobetic
parents: 39
diff changeset
   148
!Xtreams::Buffer methodsFor:'converting'!
mkobetic
parents: 39
diff changeset
   149
mkobetic
parents: 39
diff changeset
   150
writing
mkobetic
parents: 39
diff changeset
   151
	^BufferWriteStream on: self
mkobetic
parents: 39
diff changeset
   152
! !
78
mkobetic
parents: 43
diff changeset
   153
!stx_goodies_xtreams_terminals class methodsFor:'documentation'!
43
mkobetic
parents: 39
diff changeset
   154
78
mkobetic
parents: 43
diff changeset
   155
extensionsVersion_SVN
mkobetic
parents: 43
diff changeset
   156
    ^ '$Id$'
43
mkobetic
parents: 39
diff changeset
   157
! !