Smalltalk.st
author claus
Wed, 13 Oct 1993 03:14:32 +0100
changeset 5 67342904af11
parent 3 24d81bf47225
child 7 bf6f603119df
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Smalltalk
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:'exitBlocks CachedClasses'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'System-Support'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
Smalltalk comment:'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1988 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
             All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
This is one of the central classes in the system;
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
it provides all system-startup, shutdown and maintenance support.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
Also global variables are kept here.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    28
a27a279701f8 Initial revision
claus
parents:
diff changeset
    29
As you will notice, this is NOT a Dictionary
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
 - my implementation of globals is totally different
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
   (due to the need to be able to access globals from c-code as well).
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    33
$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.4 1993-10-13 02:13:47 claus Exp $
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    35
a27a279701f8 Initial revision
claus
parents:
diff changeset
    36
Smalltalk at:#ErrorNumber put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    37
Smalltalk at:#ErrorString put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    38
Smalltalk at:#Language put:#english!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    39
Smalltalk at:#LanguageTerritory put:#usa!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
Smalltalk at:#Initializing put:false!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
Smalltalk at:#SilentLoading put:false!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    42
Smalltalk at:#RecursionLimit put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    43
Smalltalk at:#MemoryLimit put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    44
Smalltalk at:#SystemPath put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    45
Smalltalk at:#StartupClass put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    46
Smalltalk at:#StartupSelector put:nil!
2
claus
parents: 1
diff changeset
    47
Smalltalk at:#StartupArguments put:nil!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    48
Smalltalk at:#SignalCatchBlock put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    49
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
!Smalltalk class methodsFor:'time-versions'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
majorVersion
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
    "return the major version number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
    ^ 2
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
    "Smalltalk majorVersion"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
minorVersion
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
    "return the minor version number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
    ^ 7
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
    "Smalltalk minorVersion"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
revision
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
    "return the revision number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
2
claus
parents: 1
diff changeset
    71
    ^ 2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
    "Smalltalk revision"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
version
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
    "return the version string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
    ^ (self majorVersion printString ,
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
       '.',
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
       self minorVersion printString ,
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
       '.',
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
       self revision printString)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
    "Smalltalk version"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
    "return the version date"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
2
claus
parents: 1
diff changeset
    91
    ^ '9-Sep-1993'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
    "Smalltalk versionDate"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
copyright
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
    "return a copyright string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
    ^ 'Copyright (c) 1988-93 by Claus Gittinger'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   100
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
    "Smalltalk copyright"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   103
a27a279701f8 Initial revision
claus
parents:
diff changeset
   104
hello
a27a279701f8 Initial revision
claus
parents:
diff changeset
   105
    "return a greeting string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   106
a27a279701f8 Initial revision
claus
parents:
diff changeset
   107
    (Language == #german) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   108
        ^ 'Willkommen bei Smalltalk/X version '
a27a279701f8 Initial revision
claus
parents:
diff changeset
   109
          , self version , ' vom ' , self versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
    ].
2
claus
parents: 1
diff changeset
   111
    (Language == #french) ifTrue:[
claus
parents: 1
diff changeset
   112
        ^ 'Bienvenue a Smalltalk/X version '
claus
parents: 1
diff changeset
   113
          , self version , ' de ' , self versionDate
claus
parents: 1
diff changeset
   114
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
    ^ 'Hello World - here is Smalltalk/X version '
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
      , self version , ' of ' , self versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
    "Smalltalk hello"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   119
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   120
a27a279701f8 Initial revision
claus
parents:
diff changeset
   121
timeStamp
a27a279701f8 Initial revision
claus
parents:
diff changeset
   122
    "return a string useful for timestamping a file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   123
a27a279701f8 Initial revision
claus
parents:
diff changeset
   124
    ^ '''From Smalltalk/X, Version:' , (Smalltalk version) , ' on '
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
      , Date today printString , ' at ' , Time now printString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
      , ''''
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   128
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
!Smalltalk class methodsFor:'initialization'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   130
a27a279701f8 Initial revision
claus
parents:
diff changeset
   131
initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
    "this one is called from init - initialize all other classes"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
    self initGlobalsFromEnvironment.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
    "sorry - there are some, which MUST be initialized before ..
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
     reason: if any error happens during init, we need Stdout to be there"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
    Object initialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
a27a279701f8 Initial revision
claus
parents:
diff changeset
   141
    ExternalStream initialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   142
    self initStandardStreams.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   143
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
    "sorry, path must be set before ...
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
     reason: some classes need it during initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
a27a279701f8 Initial revision
claus
parents:
diff changeset
   147
    self initSystemPath.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
    "must init display here - some classes (Color) need it during
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
     initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
    Workstation notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   153
        Workstation initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   154
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   155
a27a279701f8 Initial revision
claus
parents:
diff changeset
   156
    Inspector := MiniInspector.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   157
    Debugger := MiniDebugger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   158
    Compiler := ByteCodeCompiler.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   159
    Compiler isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   160
        "this allows at least immediate evaluations"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   161
        Compiler := Parser
a27a279701f8 Initial revision
claus
parents:
diff changeset
   162
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   163
2
claus
parents: 1
diff changeset
   164
    self allBehaviorsDo:[:aClass |
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   165
        "aviod never-ending story ..."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   166
        (aClass ~~ Smalltalk) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   167
            aClass initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
    self initStandardTools.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   171
    self initInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
   172
a27a279701f8 Initial revision
claus
parents:
diff changeset
   173
    "Smalltalk initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   174
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   175
a27a279701f8 Initial revision
claus
parents:
diff changeset
   176
initGlobalsFromEnvironment
a27a279701f8 Initial revision
claus
parents:
diff changeset
   177
    "setup globals from the shell-environment"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   178
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
    |envString firstChar i langString terrString|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
a27a279701f8 Initial revision
claus
parents:
diff changeset
   181
    "extract Language and LanguageTerritory from LANG variable.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
     the language and territory must not be abbreviated,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
     valid is for example: english_usa
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
                           english
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
                           german
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
                           german_austria"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
    envString := OperatingSystem getEnvironment:'LANG'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
    envString notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
        i := envString indexOf:$_.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
        (i == 0) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
            langString := envString.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
            terrString := envString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   194
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   195
            langString := envString copyFrom:1 to:(i - 1).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   196
            terrString := envString copyFrom:(i + 1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   197
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
        Language := langString asSymbol.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
        LanguageTerritory := terrString asSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   200
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   201
a27a279701f8 Initial revision
claus
parents:
diff changeset
   202
    envString := OperatingSystem getEnvironment:'VIEW3D'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   203
    envString notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   204
        firstChar := (envString at:1) asLowercase.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   205
        (firstChar == $t) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   206
            Smalltalk at:#View3D put:true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   207
        ] ifFalse: [
a27a279701f8 Initial revision
claus
parents:
diff changeset
   208
            Smalltalk at:#View3D put:false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   209
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   210
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   211
    "Smalltalk initGlobalsFromEnvironment"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   212
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   213
a27a279701f8 Initial revision
claus
parents:
diff changeset
   214
initStandardTools
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
    "predefine some tools we will need later
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
     - if the view-classes exist,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
       they will redefine Inspector and Debugger for graphical interfaces"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
    "redefine debug-tools, if view-classes exist"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
    (Smalltalk at:#Display) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
        (Smalltalk at:#InspectorView) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
            Inspector := Smalltalk at:#InspectorView
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
        (Smalltalk at:#DebugView) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
            Debugger := Smalltalk at:#DebugView
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
        Display initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
    "Smalltalk initStandardTools"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
initStandardStreams
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
    "initialize some well-known streams"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
    Stdout := NonPositionableExternalStream forStdout.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
    Stderr := NonPositionableExternalStream forStderr.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
    Stdin := NonPositionableExternalStream forStdin.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
    Printer := PrinterStream.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
    Transcript := Stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
    "Smalltalk initStandardStreams"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
initInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
    "initialize interrupts"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
a27a279701f8 Initial revision
claus
parents:
diff changeset
   248
    OperatingSystem enableUserInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
    OperatingSystem enableSignalInterrupts.
2
claus
parents: 1
diff changeset
   250
    OperatingSystem enableFpExceptionInterrupts.
claus
parents: 1
diff changeset
   251
claus
parents: 1
diff changeset
   252
    ObjectMemory userInterruptHandler:self.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
    "Smalltalk initInterrupts"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   256
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
initSystemPath
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
    "setup path to search for system files"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
    |p|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
    "the path is set to search files first locally
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
     - this allows private stuff to override global stuff"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
a27a279701f8 Initial revision
claus
parents:
diff changeset
   265
    SystemPath := OrderedCollection new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
    SystemPath add:'.'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
    SystemPath add:'..'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   268
    SystemPath add:(OperatingSystem getHomeDirectory).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   269
    (OperatingSystem isDirectory:(OperatingSystem getHomeDirectory , '/.smalltalk')) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
        SystemPath add:(OperatingSystem getHomeDirectory , '/.smalltalk')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
    p := OperatingSystem getEnvironment:'SMALLTALK_LIBDIR'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
    p notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
        SystemPath add:p
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
    (OperatingSystem isDirectory:'/usr/local/lib/smalltalk') ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
        SystemPath add:'/usr/local/lib/smalltalk'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
    (OperatingSystem isDirectory:'/usr/lib/smalltalk') ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
        SystemPath add:'/usr/lib/smalltalk'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
    "Smalltalk initSystemPath"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
    "SystemPath"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
start
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
    "main startup, if there is a Display, initialize it
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
     and start dispatching; otherwise go into a read-eval-print loop"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
a27a279701f8 Initial revision
claus
parents:
diff changeset
   291
    Initializing := true.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
    "read patches- and rc-file, do not add things into change-file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
    Class updateChanges:false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
    [
a27a279701f8 Initial revision
claus
parents:
diff changeset
   297
        self fileIn:'patches'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   298
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
        (self fileIn:((Arguments at:1) , '.rc')) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
            "no .rc file where executable is; try default smalltalk.rc"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
            self fileIn:'smalltalk.rc'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   302
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   303
    ] valueNowOrOnUnwindDo:[Class updateChanges:true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   304
a27a279701f8 Initial revision
claus
parents:
diff changeset
   305
    SilentLoading ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   306
        Transcript showCr:(self hello).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   307
        Transcript showCr:(self copyright).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
        Transcript cr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
    Initializing := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   312
    DemoMode ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   313
        Transcript showCr:'Unlicensed demo mode with limitations.'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   314
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   315
a27a279701f8 Initial revision
claus
parents:
diff changeset
   316
    [self saveMainLoop] whileTrue:[ ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
    "done"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   319
a27a279701f8 Initial revision
claus
parents:
diff changeset
   320
    self exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   321
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   322
a27a279701f8 Initial revision
claus
parents:
diff changeset
   323
restart
a27a279701f8 Initial revision
claus
parents:
diff changeset
   324
    "startup after an image has been loaded 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   325
     "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   326
    |deb insp|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   327
a27a279701f8 Initial revision
claus
parents:
diff changeset
   328
    Initializing := true.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   329
a27a279701f8 Initial revision
claus
parents:
diff changeset
   330
    "temporary switch back to dumb interface"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   331
a27a279701f8 Initial revision
claus
parents:
diff changeset
   332
    insp := Inspector.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   333
    deb := Debugger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   334
    Inspector := MiniInspector.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   335
    Debugger := MiniDebugger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   336
a27a279701f8 Initial revision
claus
parents:
diff changeset
   337
    ObjectMemory changed:#restarted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
a27a279701f8 Initial revision
claus
parents:
diff changeset
   339
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
     some must be reinitialized before ...
a27a279701f8 Initial revision
claus
parents:
diff changeset
   341
     - sorry, but order is important
a27a279701f8 Initial revision
claus
parents:
diff changeset
   342
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   343
a27a279701f8 Initial revision
claus
parents:
diff changeset
   344
    Workstation reinitialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   345
    View reinitialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   346
a27a279701f8 Initial revision
claus
parents:
diff changeset
   347
    ObjectMemory changed:#returnFromSnapshot.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   348
a27a279701f8 Initial revision
claus
parents:
diff changeset
   349
    OperatingSystem enableUserInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   350
    OperatingSystem enableSignalInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   351
a27a279701f8 Initial revision
claus
parents:
diff changeset
   352
    Inspector := insp.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   353
    Debugger := deb.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   354
a27a279701f8 Initial revision
claus
parents:
diff changeset
   355
    Initializing := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   359
     if there is no Transcript, go to stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   360
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   361
    Transcript isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
        self initStandardStreams.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   363
        Transcript := Stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   364
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
a27a279701f8 Initial revision
claus
parents:
diff changeset
   366
    Transcript cr.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   367
    Transcript showCr:('Smalltalk restarted from:' , ImageName).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   368
    DemoMode ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   369
        Transcript showCr:'Unlicensed demo mode with limitations.'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   370
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   371
a27a279701f8 Initial revision
claus
parents:
diff changeset
   372
    "this allows firing an application by defining
a27a279701f8 Initial revision
claus
parents:
diff changeset
   373
     these two globals during snapshot ..."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   374
a27a279701f8 Initial revision
claus
parents:
diff changeset
   375
    StartupClass notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   376
        StartupSelector notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   377
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
            "allow customization by reading an image specific rc-file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   379
            ImageName notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   380
                (ImageName endsWith:'.img') ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   381
                    self fileIn:((ImageName copyFrom:1 to:(ImageName size - 4)), '.rc')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   382
                ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
                    self fileIn:(ImageName , '.rc')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   384
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   385
            ].
2
claus
parents: 1
diff changeset
   386
            StartupClass perform:StartupSelector withArguments:StartupArguments
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   387
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   388
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   389
a27a279701f8 Initial revision
claus
parents:
diff changeset
   390
    Display notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
        Display dispatch
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   393
        self readEvalPrint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   395
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
    self exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   397
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   398
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
saveMainLoop
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
    "main dispatching loop - exits with true for a bad exit (to restart),
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
     false for real exit"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
    Smalltalk at:#SignalCatchBlock put:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   404
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
    "if view-classes exist, start dispatching;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
     otherwise go into a read-eval-print loop"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
    Display notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   409
        Display dispatch
a27a279701f8 Initial revision
claus
parents:
diff changeset
   410
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
        self readEvalPrint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   412
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   413
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   414
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
a27a279701f8 Initial revision
claus
parents:
diff changeset
   416
readEvalPrint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
    "simple read-eval-print loop for non-graphical Tinytalk"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   418
a27a279701f8 Initial revision
claus
parents:
diff changeset
   419
    |text|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   420
a27a279701f8 Initial revision
claus
parents:
diff changeset
   421
    'ST- ' print.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
    Stdin skipSeparators.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
    text := Stdin nextChunk.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
    [text notNil] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
        (Compiler evaluate:text) printNewline.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
        'ST- ' print.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   427
        text := Stdin nextChunk
a27a279701f8 Initial revision
claus
parents:
diff changeset
   428
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   429
    '' printNewline
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
a27a279701f8 Initial revision
claus
parents:
diff changeset
   432
!Smalltalk class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
at:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   435
    "retrieve the value stored under aKey, a symbol"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   436
a27a279701f8 Initial revision
claus
parents:
diff changeset
   437
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   438
    extern OBJ _GETGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   439
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
    RETURN ( _GETGLOBAL(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   441
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   443
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
at:aKey ifAbsent:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   445
    "retrieve the value stored under aKey.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   446
     If there is none stored this key, return the value of
a27a279701f8 Initial revision
claus
parents:
diff changeset
   447
     the evaluation of aBlock"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   448
a27a279701f8 Initial revision
claus
parents:
diff changeset
   449
    (self includesKey:aKey) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   450
        ^ self at:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   451
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   452
    ^ aBlock value
a27a279701f8 Initial revision
claus
parents:
diff changeset
   453
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   454
a27a279701f8 Initial revision
claus
parents:
diff changeset
   455
at:aKey put:aValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
    "store the argument aValue under aKey, a symbol"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   457
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
    CachedClasses := nil.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
    extern OBJ _SETGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   462
a27a279701f8 Initial revision
claus
parents:
diff changeset
   463
    RETURN ( _SETGLOBAL(aKey, aValue, (OBJ *)0) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   464
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   465
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
removeKey:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   468
    "remove the argument from the globals dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   469
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
    CachedClasses := nil.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
a27a279701f8 Initial revision
claus
parents:
diff changeset
   472
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   473
    extern OBJ _REMOVEGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   474
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
    RETURN ( _REMOVEGLOBAL(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   477
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   478
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
includesKey:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
    "return true, if the key is known"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
a27a279701f8 Initial revision
claus
parents:
diff changeset
   482
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   483
    extern OBJ _KEYKNOWN();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
a27a279701f8 Initial revision
claus
parents:
diff changeset
   485
    RETURN ( _KEYKNOWN(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   486
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   487
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   488
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
keyAtValue:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
    "return the symbol under which anObject is stored - or nil"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   491
a27a279701f8 Initial revision
claus
parents:
diff changeset
   492
    self allKeysDo:[:aKey |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   493
        (self at:aKey) == anObject ifTrue:[^ aKey]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   495
a27a279701f8 Initial revision
claus
parents:
diff changeset
   496
    "Smalltalk keyAtValue:Object"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   497
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   498
a27a279701f8 Initial revision
claus
parents:
diff changeset
   499
keys
a27a279701f8 Initial revision
claus
parents:
diff changeset
   500
    "return a collection with all keys in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   501
a27a279701f8 Initial revision
claus
parents:
diff changeset
   502
    |keys|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   503
a27a279701f8 Initial revision
claus
parents:
diff changeset
   504
    keys := OrderedCollection new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   505
    self allKeysDo:[:k | keys add:k].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   506
    ^ keys
a27a279701f8 Initial revision
claus
parents:
diff changeset
   507
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   508
a27a279701f8 Initial revision
claus
parents:
diff changeset
   509
!Smalltalk class methodsFor:'copying'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
a27a279701f8 Initial revision
claus
parents:
diff changeset
   511
shallowCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   512
    "redefine copy - there is only one Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
a27a279701f8 Initial revision
claus
parents:
diff changeset
   514
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   515
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   516
a27a279701f8 Initial revision
claus
parents:
diff changeset
   517
deepCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   518
    "redefine copy - there is only one Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   519
a27a279701f8 Initial revision
claus
parents:
diff changeset
   520
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   521
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   522
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
!Smalltalk class methodsFor:'inspecting'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
inspect
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
    "redefined to launch a DictionaryInspector on the receiver
a27a279701f8 Initial revision
claus
parents:
diff changeset
   527
     (instead of the default InspectorView)."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   528
a27a279701f8 Initial revision
claus
parents:
diff changeset
   529
    DictionaryInspectorView isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   530
        super inspect
a27a279701f8 Initial revision
claus
parents:
diff changeset
   531
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   532
        DictionaryInspectorView openOn:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   534
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   535
a27a279701f8 Initial revision
claus
parents:
diff changeset
   536
!Smalltalk class methodsFor:'misc stuff'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
a27a279701f8 Initial revision
claus
parents:
diff changeset
   538
addExitBlock:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   539
    "add a block to be executed when Smalltalk finishes"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   540
a27a279701f8 Initial revision
claus
parents:
diff changeset
   541
    exitBlocks isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   542
        exitBlocks := Array with:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
        exitBlocks add:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
    "finish Smalltalk system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   550
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
    exitBlocks notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
        exitBlocks do:[:aBlock |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
            aBlock value
a27a279701f8 Initial revision
claus
parents:
diff changeset
   554
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   555
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   556
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
    mainExit(0);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   558
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   559
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   560
    OperatingSystem exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   561
a27a279701f8 Initial revision
claus
parents:
diff changeset
   562
    "Smalltalk exit"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   563
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   564
a27a279701f8 Initial revision
claus
parents:
diff changeset
   565
sleep:aDelay
a27a279701f8 Initial revision
claus
parents:
diff changeset
   566
    "wait for aDelay seconds"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   567
a27a279701f8 Initial revision
claus
parents:
diff changeset
   568
    OperatingSystem sleep:aDelay
a27a279701f8 Initial revision
claus
parents:
diff changeset
   569
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   570
a27a279701f8 Initial revision
claus
parents:
diff changeset
   571
!Smalltalk class methodsFor:'debugging'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   572
a27a279701f8 Initial revision
claus
parents:
diff changeset
   573
printStackBacktrace
a27a279701f8 Initial revision
claus
parents:
diff changeset
   574
    "print a stack backtrace"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   575
a27a279701f8 Initial revision
claus
parents:
diff changeset
   576
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   577
    printStack(__context);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   578
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   579
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   580
a27a279701f8 Initial revision
claus
parents:
diff changeset
   581
fatalAbort
a27a279701f8 Initial revision
claus
parents:
diff changeset
   582
    "abort program and dump core"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   583
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   584
    fatal0(__context, "abort");
a27a279701f8 Initial revision
claus
parents:
diff changeset
   585
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   586
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   587
a27a279701f8 Initial revision
claus
parents:
diff changeset
   588
statistic
a27a279701f8 Initial revision
claus
parents:
diff changeset
   589
    "print some statistic data"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   590
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   591
    statistic();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   592
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   593
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   594
a27a279701f8 Initial revision
claus
parents:
diff changeset
   595
debugOn
a27a279701f8 Initial revision
claus
parents:
diff changeset
   596
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   597
a27a279701f8 Initial revision
claus
parents:
diff changeset
   598
    "LookupTrace := true.   "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   599
    MessageTrace := true.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   600
    "AllocTrace := true.     "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   601
    ObjectMemory flushInlineCaches
a27a279701f8 Initial revision
claus
parents:
diff changeset
   602
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   603
a27a279701f8 Initial revision
claus
parents:
diff changeset
   604
debugOff
a27a279701f8 Initial revision
claus
parents:
diff changeset
   605
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   606
a27a279701f8 Initial revision
claus
parents:
diff changeset
   607
    LookupTrace := nil.    
a27a279701f8 Initial revision
claus
parents:
diff changeset
   608
    MessageTrace := nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   609
    ". AllocTrace := nil     "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   610
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   611
a27a279701f8 Initial revision
claus
parents:
diff changeset
   612
allocDebugOn
a27a279701f8 Initial revision
claus
parents:
diff changeset
   613
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   614
a27a279701f8 Initial revision
claus
parents:
diff changeset
   615
    AllocTrace := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   616
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   617
a27a279701f8 Initial revision
claus
parents:
diff changeset
   618
allocDebugOff
a27a279701f8 Initial revision
claus
parents:
diff changeset
   619
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   620
a27a279701f8 Initial revision
claus
parents:
diff changeset
   621
    AllocTrace := nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   622
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   623
a27a279701f8 Initial revision
claus
parents:
diff changeset
   624
executionDebugOn
a27a279701f8 Initial revision
claus
parents:
diff changeset
   625
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   626
a27a279701f8 Initial revision
claus
parents:
diff changeset
   627
    ExecutionTrace := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   628
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   629
a27a279701f8 Initial revision
claus
parents:
diff changeset
   630
executionDebugOff
a27a279701f8 Initial revision
claus
parents:
diff changeset
   631
    "temporary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   632
a27a279701f8 Initial revision
claus
parents:
diff changeset
   633
    ExecutionTrace := nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   634
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   635
a27a279701f8 Initial revision
claus
parents:
diff changeset
   636
!Smalltalk class methodsFor:'looping'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   637
a27a279701f8 Initial revision
claus
parents:
diff changeset
   638
do:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   639
    "evaluate the argument, aBlock for all values in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   640
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   641
    __allGlobalsDo(&aBlock COMMA_CON);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   642
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   643
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   644
a27a279701f8 Initial revision
claus
parents:
diff changeset
   645
allKeysDo:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   646
    "evaluate the argument, aBlock for all keys in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   647
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   648
    __allKeysDo(&aBlock COMMA_CON);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   649
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   650
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   651
2
claus
parents: 1
diff changeset
   652
allBehaviorsDo:aBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   653
    "evaluate the argument, aBlock for all classes in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   654
a27a279701f8 Initial revision
claus
parents:
diff changeset
   655
    self allClasses do:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   656
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   657
2
claus
parents: 1
diff changeset
   658
allClassesDo:aBlock
claus
parents: 1
diff changeset
   659
    "evaluate the argument, aBlock for all classes in the system.
claus
parents: 1
diff changeset
   660
     Backward compatibility - use allBehaviorsDo: for ST-80 compatibility."
claus
parents: 1
diff changeset
   661
claus
parents: 1
diff changeset
   662
    ^ self allBehaviorsDo:aBlock
claus
parents: 1
diff changeset
   663
!
claus
parents: 1
diff changeset
   664
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   665
associationsDo:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   666
    "evaluate the argument, aBlock for all key/value pairs 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   667
     in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   668
a27a279701f8 Initial revision
claus
parents:
diff changeset
   669
    self allKeysDo:[:aKey |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   670
        aBlock value:(aKey -> (self at:aKey))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   671
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   672
a27a279701f8 Initial revision
claus
parents:
diff changeset
   673
    "Smalltalk associationsDo:[:assoc | assoc printNewline]"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   674
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   675
a27a279701f8 Initial revision
claus
parents:
diff changeset
   676
!Smalltalk class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   677
a27a279701f8 Initial revision
claus
parents:
diff changeset
   678
numberOfGlobals
a27a279701f8 Initial revision
claus
parents:
diff changeset
   679
    "return the number of global variables in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   680
a27a279701f8 Initial revision
claus
parents:
diff changeset
   681
    |tally|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   682
a27a279701f8 Initial revision
claus
parents:
diff changeset
   683
    tally := 0.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   684
    self do:[:obj | tally := tally + 1].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   685
    ^ tally
a27a279701f8 Initial revision
claus
parents:
diff changeset
   686
a27a279701f8 Initial revision
claus
parents:
diff changeset
   687
    "Smalltalk numberOfGlobals"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   688
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   689
a27a279701f8 Initial revision
claus
parents:
diff changeset
   690
cellAt:aName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   691
    "return the address of a global cell
a27a279701f8 Initial revision
claus
parents:
diff changeset
   692
     - used internally for compiler only"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   693
a27a279701f8 Initial revision
claus
parents:
diff changeset
   694
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   695
    extern OBJ _GETGLOBALCELL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   696
a27a279701f8 Initial revision
claus
parents:
diff changeset
   697
    RETURN ( _GETGLOBALCELL(aName) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   698
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   699
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   700
a27a279701f8 Initial revision
claus
parents:
diff changeset
   701
references:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   702
    "return true, if I refer to the argument, anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   703
     must be reimplemented since Smalltalk is no real collection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   704
a27a279701f8 Initial revision
claus
parents:
diff changeset
   705
    self do:[:o |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   706
        (o == anObject) ifTrue:[^ true]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   707
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   708
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   709
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   710
a27a279701f8 Initial revision
claus
parents:
diff changeset
   711
allClasses
a27a279701f8 Initial revision
claus
parents:
diff changeset
   712
    "return a collection of all classes in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   713
a27a279701f8 Initial revision
claus
parents:
diff changeset
   714
    CachedClasses isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   715
        CachedClasses := IdentitySet new:400.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   716
        self do:[:anObject |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   717
            anObject notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   718
                (anObject isBehavior) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   719
                    CachedClasses add:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   720
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   721
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   722
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   723
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   724
    ^ CachedClasses
a27a279701f8 Initial revision
claus
parents:
diff changeset
   725
a27a279701f8 Initial revision
claus
parents:
diff changeset
   726
    "Smalltalk allClasses"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   727
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   728
a27a279701f8 Initial revision
claus
parents:
diff changeset
   729
classNames
a27a279701f8 Initial revision
claus
parents:
diff changeset
   730
    "return a collection of all classNames in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   731
a27a279701f8 Initial revision
claus
parents:
diff changeset
   732
a27a279701f8 Initial revision
claus
parents:
diff changeset
   733
    ^ self allClasses collect:[:aClass | aClass name]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   734
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   735
a27a279701f8 Initial revision
claus
parents:
diff changeset
   736
!Smalltalk class methodsFor:'system management'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   737
a27a279701f8 Initial revision
claus
parents:
diff changeset
   738
removeClass:aClass
a27a279701f8 Initial revision
claus
parents:
diff changeset
   739
    "remove the argument, aClass from the smalltalk dictionary;
2
claus
parents: 1
diff changeset
   740
     we have to flush the caches since these methods are now void.
claus
parents: 1
diff changeset
   741
     Also, class variables of aClass are removed."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   742
2
claus
parents: 1
diff changeset
   743
    |sym cSym names|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   744
a27a279701f8 Initial revision
claus
parents:
diff changeset
   745
    sym := aClass name asSymbol.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   746
    ((self at:sym) == aClass) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   747
        self at:sym put:nil. "nil it out for compiled accesses"
2
claus
parents: 1
diff changeset
   748
        self removeKey:sym. 
claus
parents: 1
diff changeset
   749
claus
parents: 1
diff changeset
   750
        "remove class variables"
claus
parents: 1
diff changeset
   751
claus
parents: 1
diff changeset
   752
        names := aClass classVariableString asCollectionOfWords.
claus
parents: 1
diff changeset
   753
        names do:[:name |
claus
parents: 1
diff changeset
   754
            cSym := (sym , ':' , name) asSymbol.
claus
parents: 1
diff changeset
   755
            self at:cSym asSymbol put:nil.
claus
parents: 1
diff changeset
   756
            self removeKey:cSym
claus
parents: 1
diff changeset
   757
        ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   758
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   759
        actually could get along with less flushing
a27a279701f8 Initial revision
claus
parents:
diff changeset
   760
        (entries for aClass and subclasses only)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   761
a27a279701f8 Initial revision
claus
parents:
diff changeset
   762
        ObjectMemory flushInlineCachesForClass:aClass.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   763
        ObjectMemory flushMethodCacheFor:aClass
a27a279701f8 Initial revision
claus
parents:
diff changeset
   764
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   765
        ObjectMemory flushInlineCaches.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   766
        ObjectMemory flushMethodCache
a27a279701f8 Initial revision
claus
parents:
diff changeset
   767
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   768
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   769
a27a279701f8 Initial revision
claus
parents:
diff changeset
   770
browseChanges
a27a279701f8 Initial revision
claus
parents:
diff changeset
   771
    "startup a changes browser"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   772
a27a279701f8 Initial revision
claus
parents:
diff changeset
   773
    (self at:#ChangesBrowser) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   774
        ChangesBrowser start
a27a279701f8 Initial revision
claus
parents:
diff changeset
   775
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   776
        self error:'no ChangesBrowser'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   777
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   778
a27a279701f8 Initial revision
claus
parents:
diff changeset
   779
    "Smalltalk browseChanges "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   780
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   781
a27a279701f8 Initial revision
claus
parents:
diff changeset
   782
browseAllSelect:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   783
    "startup a browser for all methods for which aBlock returns true"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   784
a27a279701f8 Initial revision
claus
parents:
diff changeset
   785
    SystemBrowser browseAllSelect:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   786
a27a279701f8 Initial revision
claus
parents:
diff changeset
   787
    " Smalltalk browseAllSelect:[:m | m literals isNil] "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   788
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   789
a27a279701f8 Initial revision
claus
parents:
diff changeset
   790
browseImplementorsOf:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   791
    "startup a browser for all methods implementing a particular message"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   792
a27a279701f8 Initial revision
claus
parents:
diff changeset
   793
    SystemBrowser browseImplementorsOf:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   794
a27a279701f8 Initial revision
claus
parents:
diff changeset
   795
    " Smalltalk browseImplementorsOf:#at:put: "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   796
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   797
a27a279701f8 Initial revision
claus
parents:
diff changeset
   798
browseAllCallsOn:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   799
    "startup a browser for all methods sending a particular message"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   800
a27a279701f8 Initial revision
claus
parents:
diff changeset
   801
    SystemBrowser browseAllCallsOn:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   802
a27a279701f8 Initial revision
claus
parents:
diff changeset
   803
    " Smalltalk browseAllCallsOn:#at:put: "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   804
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   805
a27a279701f8 Initial revision
claus
parents:
diff changeset
   806
systemFileStreamFor:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   807
    "search aFileName in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   808
     return a fileStream or nil if not found"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   809
a27a279701f8 Initial revision
claus
parents:
diff changeset
   810
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   811
a27a279701f8 Initial revision
claus
parents:
diff changeset
   812
    SystemPath do:[:dirName |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   813
        aStream := FileStream readonlyFileNamed:(dirName , '/' , aFileName).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   814
        aStream notNil ifTrue:[^ aStream]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   815
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   816
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   817
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   818
a27a279701f8 Initial revision
claus
parents:
diff changeset
   819
fileNameForClass:aClassName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   820
    "return a good filename for aClassName -
a27a279701f8 Initial revision
claus
parents:
diff changeset
   821
     using abbreviation file if there is one"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   822
a27a279701f8 Initial revision
claus
parents:
diff changeset
   823
    |fileName aStream abbrev line thisName index|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   824
a27a279701f8 Initial revision
claus
parents:
diff changeset
   825
    fileName := aClassName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   826
a27a279701f8 Initial revision
claus
parents:
diff changeset
   827
    fileName size < 10 ifTrue:[^ fileName].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   828
a27a279701f8 Initial revision
claus
parents:
diff changeset
   829
    "too bad - look for abbreviation"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   830
a27a279701f8 Initial revision
claus
parents:
diff changeset
   831
    aStream := self systemFileStreamFor:'abbrev.stc'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   832
    aStream notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   833
        [aStream atEnd] whileFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   834
            line := aStream nextLine.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   835
            line notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   836
                (line countWords == 2) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   837
                    index := line indexOfSeparatorStartingAt:1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   838
                    (index ~~ 0) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   839
                        thisName := line copyFrom:1 to:(index - 1).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   840
                        (thisName = fileName) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   841
                            abbrev := (line copyFrom:index) withoutSeparators.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   842
                            aStream close.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   843
                            ^ abbrev
a27a279701f8 Initial revision
claus
parents:
diff changeset
   844
                        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   845
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   846
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   847
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   848
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   849
        aStream close
a27a279701f8 Initial revision
claus
parents:
diff changeset
   850
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   851
a27a279701f8 Initial revision
claus
parents:
diff changeset
   852
    "no file found"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   853
    OperatingSystem maxFileNameLength >= (fileName size + 3) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   854
        " self warn:'filename ' , fileName , ' will not work on sys5 machines' "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   855
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   856
        self error:'cant find short for ' , fileName , ' in abbreviation file'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   857
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   858
    ^ fileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   859
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   860
2
claus
parents: 1
diff changeset
   861
classNameForFile:aFileName
claus
parents: 1
diff changeset
   862
    "return the className which corresponds to an 
claus
parents: 1
diff changeset
   863
     abbreviated fileName"
claus
parents: 1
diff changeset
   864
claus
parents: 1
diff changeset
   865
    |fileName aStream abbrev line thisName index|
claus
parents: 1
diff changeset
   866
claus
parents: 1
diff changeset
   867
    "too bad - look for abbreviation"
claus
parents: 1
diff changeset
   868
claus
parents: 1
diff changeset
   869
    aStream := self systemFileStreamFor:'abbrev.stc'.
claus
parents: 1
diff changeset
   870
    aStream notNil ifTrue:[
claus
parents: 1
diff changeset
   871
        [aStream atEnd] whileFalse:[
claus
parents: 1
diff changeset
   872
            line := aStream nextLine.
claus
parents: 1
diff changeset
   873
            line notNil ifTrue:[
claus
parents: 1
diff changeset
   874
                (line countWords == 2) ifTrue:[
claus
parents: 1
diff changeset
   875
                    index := line indexOfSeparatorStartingAt:1.
claus
parents: 1
diff changeset
   876
                    (index ~~ 0) ifTrue:[
claus
parents: 1
diff changeset
   877
                        thisName := line copyFrom:1 to:(index - 1).
claus
parents: 1
diff changeset
   878
                        abbrev := (line copyFrom:index) withoutSeparators.
claus
parents: 1
diff changeset
   879
                        (abbrev = aFileName) ifTrue:[
claus
parents: 1
diff changeset
   880
                            aStream close.
claus
parents: 1
diff changeset
   881
                            ^ thisName
claus
parents: 1
diff changeset
   882
                        ]
claus
parents: 1
diff changeset
   883
                    ]
claus
parents: 1
diff changeset
   884
                ]
claus
parents: 1
diff changeset
   885
            ]
claus
parents: 1
diff changeset
   886
        ].
claus
parents: 1
diff changeset
   887
        aStream close
claus
parents: 1
diff changeset
   888
    ].
claus
parents: 1
diff changeset
   889
claus
parents: 1
diff changeset
   890
    ^ thisName
claus
parents: 1
diff changeset
   891
claus
parents: 1
diff changeset
   892
    "Smalltalk classNameForFile:'DrawObj'"
claus
parents: 1
diff changeset
   893
!
claus
parents: 1
diff changeset
   894
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   895
fileInClassObject:aClassName from:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   896
    "read in the named object file - look for it in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   897
     return true if ok, false if failed"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   898
a27a279701f8 Initial revision
claus
parents:
diff changeset
   899
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   900
a27a279701f8 Initial revision
claus
parents:
diff changeset
   901
    aStream := self systemFileStreamFor:aFileName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   902
    aStream isNil ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   903
    aStream close.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   904
a27a279701f8 Initial revision
claus
parents:
diff changeset
   905
    (ObjectFileLoader loadClass:aClassName fromObjectFile:aFileName) isNil ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   906
    ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   907
a27a279701f8 Initial revision
claus
parents:
diff changeset
   908
    " Smalltalk fileInClassObject:'AbstractPath' from:'../goodies/Paths/AbstrPath.o' "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   909
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   910
a27a279701f8 Initial revision
claus
parents:
diff changeset
   911
fileIn:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   912
    "read in the named file - look for it in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   913
     return true if ok, false if failed"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   914
a27a279701f8 Initial revision
claus
parents:
diff changeset
   915
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   916
a27a279701f8 Initial revision
claus
parents:
diff changeset
   917
    aStream := self systemFileStreamFor:aFileName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   918
    aStream isNil ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   919
a27a279701f8 Initial revision
claus
parents:
diff changeset
   920
    [aStream fileIn] valueNowOrOnUnwindDo:[aStream close].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   921
    ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   922
a27a279701f8 Initial revision
claus
parents:
diff changeset
   923
    " Smalltalk fileIn:'games/TicTacToe.st' "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   924
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   925
a27a279701f8 Initial revision
claus
parents:
diff changeset
   926
fileInChanges
a27a279701f8 Initial revision
claus
parents:
diff changeset
   927
    "read in the last changes file - bringing the system to the state it
a27a279701f8 Initial revision
claus
parents:
diff changeset
   928
     had when left the last time"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   929
a27a279701f8 Initial revision
claus
parents:
diff changeset
   930
    |upd|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   931
a27a279701f8 Initial revision
claus
parents:
diff changeset
   932
    "tell Class to NOT update the changes file now ..."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   933
    upd := Class updateChanges:false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   934
    [self fileIn:'changes'] valueNowOrOnUnwindDo:[Class updateChanges:upd]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   935
a27a279701f8 Initial revision
claus
parents:
diff changeset
   936
    "Smalltalk fileInChanges "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   937
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   938
a27a279701f8 Initial revision
claus
parents:
diff changeset
   939
fileInClass:aClassName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   940
    "find a source/object file for aClassName and -if found - load it"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   941
a27a279701f8 Initial revision
claus
parents:
diff changeset
   942
    |fName newClass upd|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   943
a27a279701f8 Initial revision
claus
parents:
diff changeset
   944
    fName := self fileNameForClass:aClassName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   945
    fName notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   946
        upd := Class updateChanges:false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   947
        [
a27a279701f8 Initial revision
claus
parents:
diff changeset
   948
            (self fileIn:('fileIn/' , fName , '.ld')) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   949
                (self fileInClassObject:aClassName from:('binary/' , fName, '.so')) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   950
                    (self fileInClassObject:aClassName from:('binary/' , fName, '.o')) ifFalse:[
2
claus
parents: 1
diff changeset
   951
                        (self fileIn:(fName , '.st')) ifFalse:[
claus
parents: 1
diff changeset
   952
                            self fileIn:('source/' , fName , '.st')
claus
parents: 1
diff changeset
   953
                        ]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   954
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   955
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   956
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   957
        ] valueNowOrOnUnwindDo:[Class updateChanges:upd].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   958
        newClass := self at:(aClassName asSymbol).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   959
        (newClass notNil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   960
         and:[newClass implements:#initialize]) ifTrue:[newClass initialize]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   961
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   962
! !
2
claus
parents: 1
diff changeset
   963
claus
parents: 1
diff changeset
   964
!Smalltalk class methodsFor: 'binary storage'!
claus
parents: 1
diff changeset
   965
claus
parents: 1
diff changeset
   966
addGlobalsTo: globalDictionary manager: manager
claus
parents: 1
diff changeset
   967
    | pools |
claus
parents: 1
diff changeset
   968
    pools _ Set new.
claus
parents: 1
diff changeset
   969
    self associationsDo: [:assoc|
claus
parents: 1
diff changeset
   970
        assoc value == self ifFalse:[
claus
parents: 1
diff changeset
   971
            assoc value isClass ifTrue: [
claus
parents: 1
diff changeset
   972
                assoc value addGlobalsTo: globalDictionary manager: manager.
claus
parents: 1
diff changeset
   973
                "pools addAll: assoc value sharedPools"
claus
parents: 1
diff changeset
   974
            ] ifFalse: [
claus
parents: 1
diff changeset
   975
                globalDictionary at: assoc put: self
claus
parents: 1
diff changeset
   976
            ].
claus
parents: 1
diff changeset
   977
            assoc value isNil ifFalse:[
claus
parents: 1
diff changeset
   978
                globalDictionary at: assoc value put: self
claus
parents: 1
diff changeset
   979
            ]
claus
parents: 1
diff changeset
   980
        ]
claus
parents: 1
diff changeset
   981
    ].
claus
parents: 1
diff changeset
   982
claus
parents: 1
diff changeset
   983
    pools do: [:poolDictionary|
claus
parents: 1
diff changeset
   984
        poolDictionary addGlobalsTo: globalDictionary manager: manager
claus
parents: 1
diff changeset
   985
    ]
claus
parents: 1
diff changeset
   986
!
claus
parents: 1
diff changeset
   987
claus
parents: 1
diff changeset
   988
storeBinaryDefinitionOf: anObject on: stream manager: manager
claus
parents: 1
diff changeset
   989
    | string |
claus
parents: 1
diff changeset
   990
claus
parents: 1
diff changeset
   991
    anObject class == Association ifTrue: [
claus
parents: 1
diff changeset
   992
        string := 'Smalltalk associationAt: ', anObject key storeString
claus
parents: 1
diff changeset
   993
    ] ifFalse: [
claus
parents: 1
diff changeset
   994
        string := 'Smalltalk at: ', (self keyAtValue: anObject) storeString
claus
parents: 1
diff changeset
   995
    ].
claus
parents: 1
diff changeset
   996
    stream nextNumber: 2 put: string size.
claus
parents: 1
diff changeset
   997
    string do: [:char| stream nextPut: char asciiValue]
claus
parents: 1
diff changeset
   998
! !