InternalPipeStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 03 Jun 2014 00:16:14 +0200
changeset 3291 facd0cfd0781
parent 3128 b4d3fba8e356
child 3978 e4c47408edb2
permissions -rw-r--r--
Fixed examples (added missing vars, dot at the end of statement)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1015
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Stream subclass:#InternalPipeStream
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'queue'
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Streams'
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
1016
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    10
!InternalPipeStream class methodsFor:'documentation'!
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    11
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    12
documentation
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    13
"
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    14
    not useful on its own, but can be used to talk to a vt100
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    15
    terminal view ...
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    16
    See example.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    17
"
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    18
!
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    19
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    20
examples
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    21
"
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    22
                                                                [exBegin]
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    23
    |p|
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    24
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    25
    p := InternalPipeStream new.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    26
    [
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    27
        10 timesRepeat:[
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    28
            p nextPutLine:'hello'
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    29
        ].
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    30
    ] fork.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    31
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    32
    [
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    33
        10 timesRepeat:[
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    34
            Transcript showCR:p nextLine
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    35
        ].
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    36
    ] fork.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    37
                                                                [exEnd]
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    38
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    39
                                                                [exBegin]
3291
facd0cfd0781 Fixed examples (added missing vars, dot at the end of statement)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3128
diff changeset
    40
    |userInput elizasOutput top terminal|
1016
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    41
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    42
    userInput    := InternalPipeStream new.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    43
    elizasOutput := InternalPipeStream new.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    44
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    45
    top := StandardSystemView new.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    46
    terminal := VT100TerminalView openOnInput: userInput output:elizasOutput in:top.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    47
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    48
    top extent:(terminal preferredExtent).
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    49
    top label:'The doctor is in'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    50
    top iconLabel:'doctor'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    51
    top open.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    52
    top waitUntilVisible.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    53
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    54
    terminal translateNLToCRNL:true.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    55
    terminal inputTranslateCRToNL:true.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    56
    terminal localEcho:true.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    57
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    58
    elizasOutput nextPutLine:'Hi, I am Eliza'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    59
    elizasOutput nextPutLine:'What is your problem ?'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    60
    elizasOutput nextPutLine:''.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    61
    elizasOutput nextPutAll:'>'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    62
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    63
    [top realized] whileTrue:[
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    64
        |line answer matchingRule|
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    65
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    66
        line := userInput nextLine.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    67
        (#('quit' 'exit' 'end' 'bye') includes:line) ifTrue:[
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    68
            top destroy.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    69
            ^ self
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    70
        ].
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    71
3291
facd0cfd0781 Fixed examples (added missing vars, dot at the end of statement)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3128
diff changeset
    72
        answer := 'Tell me more.'.
1016
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    73
        elizasOutput nextPutLine:answer.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    74
        elizasOutput nextPutAll:'>'.
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    75
    ].
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    76
                                                                [exEnd]
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    77
"
47e190c35919 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1015
diff changeset
    78
! !
1015
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
!InternalPipeStream class methodsFor:'instance creation'!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
new
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    ^ self basicNew initialize
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!InternalPipeStream methodsFor:'accessing'!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
atEnd
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    ^ false . "/ queue notNil
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
close
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    queue := nil
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
next
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    "return the next element from the stream (might block until something is written)"
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    ^ queue next
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
nextAvailableBytes:nMax into:aBuffer startingAt:startIndex
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    |n idx ch|
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    n := 0.
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    idx := startIndex.
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    [n <= nMax] whileTrue:[
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
        ch := queue nextIfEmpty:[^ n ].
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
        aBuffer at:idx put:ch.
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
        idx := idx + 1.
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
        n := n + 1
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    ].
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    ^ n
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
nextPut:something
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    "write an element (might wakeup readers)"
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    queue nextPut:something
3128
b4d3fba8e356 class: InternalPipeStream
Claus Gittinger <cg@exept.de>
parents: 1016
diff changeset
   120
!
b4d3fba8e356 class: InternalPipeStream
Claus Gittinger <cg@exept.de>
parents: 1016
diff changeset
   121
b4d3fba8e356 class: InternalPipeStream
Claus Gittinger <cg@exept.de>
parents: 1016
diff changeset
   122
size
b4d3fba8e356 class: InternalPipeStream
Claus Gittinger <cg@exept.de>
parents: 1016
diff changeset
   123
    ^ queue size
1015
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
! !
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!InternalPipeStream methodsFor:'initialization'!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
initialize
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    queue := SharedQueue new.
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
! !
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
!InternalPipeStream methodsFor:'synchronization'!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
readWait
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    queue readSemaphore wait
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
! !
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
!InternalPipeStream class methodsFor:'documentation'!
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
version
3291
facd0cfd0781 Fixed examples (added missing vars, dot at the end of statement)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3128
diff changeset
   141
    ^ '$Header: /cvs/stx/stx/libbasic2/InternalPipeStream.st,v 1.4 2014-06-02 22:16:14 vrany Exp $'
1015
b03679cb8a3f initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
! !
3128
b4d3fba8e356 class: InternalPipeStream
Claus Gittinger <cg@exept.de>
parents: 1016
diff changeset
   143