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