ReadEvalPrintLoop.st
author Claus Gittinger <cg@exept.de>
Thu, 07 Dec 2006 18:14:34 +0100
changeset 10253 48588709c555
parent 10252 c27816dc60c3
child 10254 e576d49220c2
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10249
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     1
"
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     3
              All Rights Reserved
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     4
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     5
 This software is furnished under a license and may be used
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     6
 only in accordance with the terms of that license and with the
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
     9
 other person.  No title to or ownership of the software is
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    10
 hereby transferred.
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    11
"
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
Object subclass:#ReadEvalPrintLoop
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'inputStream outputStream errorStream compiler prompt chunkFormat'
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'* uncategorized *'
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
10249
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    21
!ReadEvalPrintLoop class methodsFor:'documentation'!
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    22
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    23
copyright
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    24
"
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    25
 COPYRIGHT (c) 2006 by eXept Software AG
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    26
              All Rights Reserved
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    27
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    28
 This software is furnished under a license and may be used
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    29
 only in accordance with the terms of that license and with the
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    31
 be provided or otherwise made available to, or used by, any
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    32
 other person.  No title to or ownership of the software is
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    33
 hereby transferred.
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    34
"
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    35
! !
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!ReadEvalPrintLoop methodsFor:'accessing'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
chunkFormat:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    chunkFormat := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
compiler:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    compiler := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
error:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    errorStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    "Created: / 07-12-2006 / 17:33:39 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
input:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    inputStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    "Modified: / 07-12-2006 / 17:33:31 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
output:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    outputStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    "Created: / 07-12-2006 / 17:27:48 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
prompt:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    prompt := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
! !
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!ReadEvalPrintLoop methodsFor:'evaluation'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
readEvalPrintLoop
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    "{ Pragma: +optSpace }"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    "simple read-eval-print loop for non-graphical Minitalk.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
     If the chunkFormat-argument is true, chunks are read.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
     Otherwise, lines up to an empty line (or EOF) are read."
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    [
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
    79
        |input output error lines chunk compilerClass|
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
        input := inputStream ? Stdin.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
        output := outputStream ? Stdout.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        error := errorStream ? Stderr.
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
    84
        compilerClass := compiler ? Compiler.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
        prompt notNil ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
            output nextPutAll:prompt.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
        input atEnd ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
            ^ self.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
        (chunkFormat ? true) ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
            input skipSeparators.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
            chunk := input nextChunk.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
        ] ifFalse:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
            lines := OrderedCollection new.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
            [
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
                |line|
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
                line := input nextLine.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
                line notEmptyOrNil ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
                    (line startsWith:'#') ifFalse:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
                        lines add:line.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
                    ]
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
                ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
                line notEmptyOrNil.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
            ] whileTrue.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
            chunk := lines asStringWith:Character cr.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
        chunk notEmptyOrNil ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
            AbortAllOperationRequest handle:[:ex |
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
                error nextPutLine:('Evaluation aborted: ', ex description)
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
            ] do:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
                |value|
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   119
                value := (compilerClass new requestor:self) evaluate:chunk.
10253
48588709c555 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10252
diff changeset
   120
                value printOn:output.
48588709c555 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10252
diff changeset
   121
                output cr.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
            ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    ] loop.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   126
    "
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   127
     (ReadEvalPrintLoop new prompt:'>') readEvalPrintLoop
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   128
    "
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   129
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    "Created: / 07-12-2006 / 17:27:21 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
! !
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
!ReadEvalPrintLoop class methodsFor:'documentation'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
version
10253
48588709c555 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10252
diff changeset
   136
    ^ '$Header: /cvs/stx/stx/libbasic/ReadEvalPrintLoop.st,v 1.4 2006-12-07 17:14:34 cg Exp $'
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
! !