ReadEvalPrintLoop.st
author Claus Gittinger <cg@exept.de>
Thu, 07 Dec 2006 19:22:30 +0100
changeset 10260 c67017d36eda
parent 10259 926e196ad949
child 10261 b429f96cf069
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
10254
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    15
	instanceVariableNames:'inputStream outputStream errorStream compiler prompt
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    16
		doChunkFormat traceFlag timingFlag'
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	category:'* uncategorized *'
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
10249
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    22
!ReadEvalPrintLoop class methodsFor:'documentation'!
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    23
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    24
copyright
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    25
"
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    26
 COPYRIGHT (c) 2006 by eXept Software AG
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    27
              All Rights Reserved
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    28
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    29
 This software is furnished under a license and may be used
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    30
 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
    31
 inclusion of the above copyright notice.   This software may not
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    32
 be provided or otherwise made available to, or used by, any
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    33
 other person.  No title to or ownership of the software is
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    34
 hereby transferred.
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    35
"
4f4b81940a34 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10248
diff changeset
    36
! !
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!ReadEvalPrintLoop methodsFor:'accessing'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
10254
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    40
compiler:something
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    41
    compiler := something.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
10254
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    44
doChunkFormat:something
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    45
    doChunkFormat := something.
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    46
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
    47
    "Created: / 07-12-2006 / 18:24:04 / cg"
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
error:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    errorStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    "Created: / 07-12-2006 / 17:33:39 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    56
errorStream
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    57
    ^ errorStream ? Transcript ? Stderr
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    58
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    59
    "Created: / 07-12-2006 / 19:11:56 / cg"
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    60
!
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    61
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
input:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    inputStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    "Modified: / 07-12-2006 / 17:33:31 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    68
inputStream
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    69
    ^ inputStream ? Stdin
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    70
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    71
    "Created: / 07-12-2006 / 19:12:13 / cg"
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    72
!
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    73
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
output:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    outputStream := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    "Created: / 07-12-2006 / 17:27:48 / cg"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    80
outputStream
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    81
    ^ outputStream ? Stdout
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    82
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    83
    "Created: / 07-12-2006 / 19:12:27 / cg"
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    84
!
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
    85
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
prompt:something
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    prompt := something.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
! !
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    90
!ReadEvalPrintLoop methodsFor:'directives'!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    91
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    92
cmd_clear:lineStream
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    93
    self cmd_setOrClear:lineStream to:false
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    94
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    95
    "Created: / 07-12-2006 / 19:04:50 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    96
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    97
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    98
cmd_exit:lineStream
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
    99
    Smalltalk exit
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   100
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   101
    "Created: / 07-12-2006 / 18:55:46 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   102
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   103
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   104
cmd_help:lineStream
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   105
    self errorStream
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   106
        nextPutAll:
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   107
'Everything entered up to an empty line is called a "chunk" and evaluated as a block.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   108
Lines starting with "#" are commands to the read-eval-print interpreter.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   109
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   110
Valid commands are:
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   111
    help ............... this text
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   112
    exit ............... exit smalltalk
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   113
    use <package>....... use a package
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   114
        stx:libwidg ........ GUI package
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   115
        stx:libtool ........ IDE tool package
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   116
    show <what> ........ show info
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   117
        variables .......... interpreter variables
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   118
        processes .......... processes
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   119
        memory ............. memory usage
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   120
        flags .............. flags
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   121
    set/clear <flag> ... set or clear a flag
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   122
        trace .............. tracing execution
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   123
        timing ............. timing execution
10257
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   124
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   125
MiniDebugger shows its help with "?".
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   126
'
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   127
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   128
    "Created: / 07-12-2006 / 18:54:20 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   129
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   130
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   131
cmd_set:lineStream
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   132
    self cmd_setOrClear:lineStream to:true
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   133
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   134
    "Modified: / 07-12-2006 / 19:04:46 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   135
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   136
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   137
cmd_setOrClear:lineStream to:aBoolean
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   138
    |what|
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   139
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   140
    lineStream skipSeparators.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   141
    what := lineStream nextAlphaNumericWord.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   142
    (what startsWith:'tra') ifTrue:[
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   143
        traceFlag := aBoolean.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   144
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   145
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   146
    (what startsWith:'tim') ifTrue:[
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   147
        timingFlag := aBoolean.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   148
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   149
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   150
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   151
    self errorStream nextPutLine:'?? which flag ?'.
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   152
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   153
    "Modified: / 07-12-2006 / 19:13:34 / cg"
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   154
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   155
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   156
cmd_show:lineStream
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   157
    |what|
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   158
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   159
    lineStream skipSeparators.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   160
    what := lineStream nextAlphaNumericWord.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   161
    (what startsWith:'var') ifTrue:[
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   162
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   163
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   164
    (what startsWith:'proc') ifTrue:[
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   165
        MiniDebugger basicNew showProcesses.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   166
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   167
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   168
    (what startsWith:'mem') ifTrue:[
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   169
        self errorStream 
10260
c67017d36eda *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10259
diff changeset
   170
            nextPutLine:('overall: ',(ObjectMemory bytesUsed // 1024) printString,' kb');
c67017d36eda *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10259
diff changeset
   171
            nextPutLine:('free   : ',(ObjectMemory freeSpace // 1024) printString,' kb');
10259
926e196ad949 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10258
diff changeset
   172
            nextPutLine:('minorGC: ',(ObjectMemory scavengeCount) printString);
926e196ad949 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10258
diff changeset
   173
            nextPutLine:('majorGC: ',(ObjectMemory garbageCollectCount) printString).
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   174
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   175
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   176
    (what startsWith:'flag') ifTrue:[
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   177
        self errorStream 
10259
926e196ad949 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10258
diff changeset
   178
            nextPutLine:('trace : ',traceFlag printString);
926e196ad949 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10258
diff changeset
   179
            nextPutLine:('timing: ',timingFlag printString).
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   180
        ^ self.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   181
    ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   182
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   183
    self errorStream nextPutLine:'?? show what ?'.
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   184
10260
c67017d36eda *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10259
diff changeset
   185
    "Modified: / 07-12-2006 / 19:23:02 / cg"
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   186
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   187
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   188
cmd_use:lineStream
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   189
    |pkg|
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   190
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   191
    lineStream skipSeparators.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   192
    pkg := lineStream upToEnd withoutSeparators.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   193
    Smalltalk loadPackage:pkg
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   194
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   195
    "Created: / 07-12-2006 / 19:07:56 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   196
!
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   197
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   198
directive:line
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   199
    |s cmd|
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   200
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   201
    s := line readStream.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   202
    s next. "/ skip the hash
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   203
    s skipSeparators.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   204
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   205
    cmd := s nextAlphaNumericWord.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   206
    self 
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   207
        perform:('cmd_',cmd,':') asSymbol with:s 
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   208
        ifNotUnderstood:[   
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   209
            self errorStream  
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   210
                nextPutAll:'?? invalid command: ';
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   211
                nextPutAll:cmd;
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   212
                nextPutAll:'. Type "#help" for help.';
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   213
                cr.
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   214
        ].
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   215
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   216
    "Created: / 07-12-2006 / 18:49:17 / cg"
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   217
! !
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   218
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
!ReadEvalPrintLoop methodsFor:'evaluation'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
readEvalPrintLoop
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    "{ Pragma: +optSpace }"
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    "simple read-eval-print loop for non-graphical Minitalk.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
     If the chunkFormat-argument is true, chunks are read.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
     Otherwise, lines up to an empty line (or EOF) are read."
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    [
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   229
        |input output error lines chunk compilerClass|
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
10256
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   231
        "/ re-evaluate these in the loop, so they can be changed dynamically
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   232
        input := self inputStream.
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   233
        output := self outputStream.
63993a2b4d15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10255
diff changeset
   234
        error := self errorStream.
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   235
        compilerClass := compiler ? Compiler.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
        prompt notNil ifTrue:[
10258
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   238
            error nextPutAll:prompt.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
        input atEnd ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
            ^ self.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
10254
e576d49220c2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10253
diff changeset
   245
        (doChunkFormat ? true) ifTrue:[
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
            input skipSeparators.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
            chunk := input nextChunk.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
        ] ifFalse:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
            lines := OrderedCollection new.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
            [
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
                |line|
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
                line := input nextLine.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
                line notEmptyOrNil ifTrue:[
10257
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   255
                    line = '?' ifTrue:[
10258
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   256
                        self cmd_help:nil.
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   257
                        prompt notNil ifTrue:[
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   258
                            error nextPutAll:prompt.
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   259
                        ].
10255
a50472b6354a directives
Claus Gittinger <cg@exept.de>
parents: 10254
diff changeset
   260
                    ] ifFalse:[
10257
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   261
                        (line startsWith:'#') ifTrue:[
10258
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   262
                            self directive:line.
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   263
                            prompt notNil ifTrue:[
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   264
                                error nextPutAll:prompt.
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   265
                            ].
10257
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   266
                        ] ifFalse:[
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   267
                            lines add:line.
2bc06451585b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10256
diff changeset
   268
                        ]
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
                    ]
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
                ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
                line notEmptyOrNil.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
            ] whileTrue.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
            chunk := lines asStringWith:Character cr.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
        chunk notEmptyOrNil ifTrue:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
            AbortAllOperationRequest handle:[:ex |
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
                error nextPutLine:('Evaluation aborted: ', ex description)
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
            ] do:[
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
                |value|
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   282
                value := (compilerClass new requestor:self) evaluate:chunk.
10253
48588709c555 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10252
diff changeset
   283
                value printOn:output.
48588709c555 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10252
diff changeset
   284
                output cr.
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
            ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
        ].
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
    ] loop.
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
10252
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   289
    "
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   290
     (ReadEvalPrintLoop new prompt:'>') readEvalPrintLoop
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   291
    "
c27816dc60c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10249
diff changeset
   292
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    "Created: / 07-12-2006 / 17:27:21 / cg"
10258
db81e63f7037 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10257
diff changeset
   294
    "Modified: / 07-12-2006 / 19:20:06 / cg"
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
! !
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
!ReadEvalPrintLoop class methodsFor:'documentation'!
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
version
10260
c67017d36eda *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10259
diff changeset
   300
    ^ '$Header: /cvs/stx/stx/libbasic/ReadEvalPrintLoop.st,v 1.11 2006-12-07 18:22:30 cg Exp $'
10248
c00913f343f1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
! !