Smalltalk.st
author claus
Wed, 12 Jan 1994 20:11:58 +0100
changeset 42 e33491f6f260
parent 27 d98f9dd437f7
child 44 b262907c93ea
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:''
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
    15
       classVariableNames:'ExitBlocks CachedClasses SystemPath 
10
claus
parents: 8
diff changeset
    16
                           StartupClass StartupSelector StartupArguments
claus
parents: 8
diff changeset
    17
                           CachedAbbreviations'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
       category:'System-Support'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
Smalltalk comment:'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    24
COPYRIGHT (c) 1988 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
             All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
This is one of the central classes in the system;
a27a279701f8 Initial revision
claus
parents:
diff changeset
    28
it provides all system-startup, shutdown and maintenance support.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    29
Also global variables are kept here.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
As you will notice, this is NOT a Dictionary
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
 - my implementation of globals is totally different
a27a279701f8 Initial revision
claus
parents:
diff changeset
    33
   (due to the need to be able to access globals from c-code as well).
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
    35
$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.11 1994-01-12 19:10:49 claus Exp $
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    36
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    37
a27a279701f8 Initial revision
claus
parents:
diff changeset
    38
Smalltalk at:#ErrorNumber put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    39
Smalltalk at:#ErrorString put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
Smalltalk at:#Language put:#english!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
Smalltalk at:#LanguageTerritory put:#usa!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    42
Smalltalk at:#Initializing put:false!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    43
Smalltalk at:#SilentLoading put:false!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    44
Smalltalk at:#MemoryLimit put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    45
Smalltalk at:#SignalCatchBlock put:nil!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    46
a27a279701f8 Initial revision
claus
parents:
diff changeset
    47
!Smalltalk class methodsFor:'time-versions'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    48
a27a279701f8 Initial revision
claus
parents:
diff changeset
    49
majorVersion
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
    "return the major version number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
    ^ 2
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
    "Smalltalk majorVersion"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
minorVersion
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
    "return the minor version number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
10
claus
parents: 8
diff changeset
    60
    ^ 8
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    "Smalltalk minorVersion"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
revision
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
    "return the revision number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
    68
    ^ 4
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
    "Smalltalk revision"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
version
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
    "return the version string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
    ^ (self majorVersion printString ,
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
       '.',
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
       self minorVersion printString ,
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
       '.',
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
       self revision printString)
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
    "Smalltalk version"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
    "return the version date"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
27
d98f9dd437f7 *** empty log message ***
claus
parents: 24
diff changeset
    88
    ^ '17-dec-1993'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    "Smalltalk versionDate"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
copyright
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
    "return a copyright string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
    ^ 'Copyright (c) 1988-93 by Claus Gittinger'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
    "Smalltalk copyright"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   100
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
hello
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
    "return a greeting string"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   103
a27a279701f8 Initial revision
claus
parents:
diff changeset
   104
    (Language == #german) ifTrue:[
27
d98f9dd437f7 *** empty log message ***
claus
parents: 24
diff changeset
   105
        ^ 'Willkommen bei SmallTalk/X version '
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   106
          , self version , ' vom ' , self versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
   107
    ].
2
claus
parents: 1
diff changeset
   108
    (Language == #french) ifTrue:[
27
d98f9dd437f7 *** empty log message ***
claus
parents: 24
diff changeset
   109
        ^ 'Bienvenue a SmallTalk/X version '
2
claus
parents: 1
diff changeset
   110
          , self version , ' de ' , self versionDate
claus
parents: 1
diff changeset
   111
    ].
27
d98f9dd437f7 *** empty log message ***
claus
parents: 24
diff changeset
   112
    ^ 'Hello World - here is SmallTalk/X version '
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   113
      , self version , ' of ' , self versionDate
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
    "Smalltalk hello"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
timeStamp
a27a279701f8 Initial revision
claus
parents:
diff changeset
   119
    "return a string useful for timestamping a file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   120
a27a279701f8 Initial revision
claus
parents:
diff changeset
   121
    ^ '''From Smalltalk/X, Version:' , (Smalltalk version) , ' on '
a27a279701f8 Initial revision
claus
parents:
diff changeset
   122
      , Date today printString , ' at ' , Time now printString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   123
      , ''''
a27a279701f8 Initial revision
claus
parents:
diff changeset
   124
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
!Smalltalk class methodsFor:'initialization'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
a27a279701f8 Initial revision
claus
parents:
diff changeset
   128
initialize
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   129
    "initialize all other classes; setup dispatcher processes etc.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   130
     - this one is the first entry into the smalltalk world right after startup,
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   131
       ususally followed by Smalltalk>>start"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
    self initGlobalsFromEnvironment.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
    "sorry - there are some, which MUST be initialized before ..
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   136
     reason: if any error happens during init, we need Signals, Stdout etc. to be there"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
    Object initialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
    ExternalStream initialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
    self initStandardStreams.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   141
a27a279701f8 Initial revision
claus
parents:
diff changeset
   142
    "sorry, path must be set before ...
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   143
     reason: some classes need it during initialize (they might need resources, bitmaps etc)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
    self initSystemPath.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   147
    "must init display here - some classes (Color, Form) need it during initialize"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
    Workstation notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
        Workstation initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
10
claus
parents: 8
diff changeset
   153
    "define low-level debugging tools - graphical classes are not prepared yet
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   154
     to handle things ... - this will bring us into the MiniDebugger when an error occurs"
10
claus
parents: 8
diff changeset
   155
1
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:[
10
claus
parents: 8
diff changeset
   160
        "this allows at least immediate evaluations for runtime systems without compiler"
1
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
10
claus
parents: 8
diff changeset
   164
    "now finally initialize all classes"
claus
parents: 8
diff changeset
   165
2
claus
parents: 1
diff changeset
   166
    self allBehaviorsDo:[:aClass |
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   167
        "avoid never-ending story ..."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
        (aClass ~~ Smalltalk) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
            aClass initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   171
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   172
    self initStandardTools.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   173
    self initInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
   174
a27a279701f8 Initial revision
claus
parents:
diff changeset
   175
    "Smalltalk initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   176
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   177
a27a279701f8 Initial revision
claus
parents:
diff changeset
   178
initGlobalsFromEnvironment
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
    "setup globals from the shell-environment"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
a27a279701f8 Initial revision
claus
parents:
diff changeset
   181
    |envString firstChar i langString terrString|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
    "extract Language and LanguageTerritory from LANG variable.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
     the language and territory must not be abbreviated,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
     valid is for example: english_usa
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
                           english
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
                           german
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
                           german_austria"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
    envString := OperatingSystem getEnvironment:'LANG'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
    envString notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
        i := envString indexOf:$_.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
        (i == 0) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   194
            langString := envString.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   195
            terrString := envString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   196
        ] ifFalse:[
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   197
            langString := envString copyTo:(i - 1).
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
            terrString := envString copyFrom:(i + 1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   200
        Language := langString asSymbol.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   201
        LanguageTerritory := terrString asSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   202
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   203
a27a279701f8 Initial revision
claus
parents:
diff changeset
   204
    envString := OperatingSystem getEnvironment:'VIEW3D'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   205
    envString notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   206
        firstChar := (envString at:1) asLowercase.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   207
        (firstChar == $t) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   208
            Smalltalk at:#View3D put:true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   209
        ] ifFalse: [
a27a279701f8 Initial revision
claus
parents:
diff changeset
   210
            Smalltalk at:#View3D put:false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   211
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   212
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   213
    "Smalltalk initGlobalsFromEnvironment"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   214
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
initStandardTools
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
    "predefine some tools we will need later
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
     - if the view-classes exist,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
       they will redefine Inspector and Debugger for graphical interfaces"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
    "redefine debug-tools, if view-classes exist"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
    (Smalltalk at:#Display) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
        (Smalltalk at:#InspectorView) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
            Inspector := Smalltalk at:#InspectorView
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
        (Smalltalk at:#DebugView) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
            Debugger := Smalltalk at:#DebugView
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
        Display initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
    "Smalltalk initStandardTools"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
initStandardStreams
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
    "initialize some well-known streams"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
    Stdout := NonPositionableExternalStream forStdout.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
    Stderr := NonPositionableExternalStream forStderr.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
    Stdin := NonPositionableExternalStream forStdin.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
    Printer := PrinterStream.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
    Transcript := Stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
    "Smalltalk initStandardStreams"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
initInterrupts
a27a279701f8 Initial revision
claus
parents:
diff changeset
   248
    "initialize interrupts"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
    OperatingSystem enableUserInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
    OperatingSystem enableSignalInterrupts.
2
claus
parents: 1
diff changeset
   252
    OperatingSystem enableFpExceptionInterrupts.
claus
parents: 1
diff changeset
   253
claus
parents: 1
diff changeset
   254
    ObjectMemory userInterruptHandler:self.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   255
    ObjectMemory signalInterruptHandler:self.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   256
    ObjectMemory recursionInterruptHandler:self.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
    "Smalltalk initInterrupts"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
initSystemPath
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   262
    "setup path to search for system files.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   263
     the default path is set to:
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   264
            .
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   265
            ..
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   266
            $HOME
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   267
            $HOME/.smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   268
            $SMALLTALK_LIBDIR
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   269
            /usr/local/lib/smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   270
            /usr/lib/smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   271
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
    |p|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
    "the path is set to search files first locally
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
     - this allows private stuff to override global stuff"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
    SystemPath := OrderedCollection new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
    SystemPath add:'.'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
    SystemPath add:'..'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
    SystemPath add:(OperatingSystem getHomeDirectory).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
    (OperatingSystem isDirectory:(OperatingSystem getHomeDirectory , '/.smalltalk')) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
        SystemPath add:(OperatingSystem getHomeDirectory , '/.smalltalk')
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
    p := OperatingSystem getEnvironment:'SMALLTALK_LIBDIR'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
    p notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
        SystemPath add:p
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
    (OperatingSystem isDirectory:'/usr/local/lib/smalltalk') ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
        SystemPath add:'/usr/local/lib/smalltalk'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   291
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
    (OperatingSystem isDirectory:'/usr/lib/smalltalk') ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
        SystemPath add:'/usr/lib/smalltalk'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
    "Smalltalk initSystemPath"
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   297
    "Smalltalk systemPath"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   298
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
start
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
    "main startup, if there is a Display, initialize it
a27a279701f8 Initial revision
claus
parents:
diff changeset
   302
     and start dispatching; otherwise go into a read-eval-print loop"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   303
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   304
    |idx|
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   305
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   306
    Initializing := true.
10
claus
parents: 8
diff changeset
   307
    Processor := ProcessorScheduler new.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
    "read patches- and rc-file, do not add things into change-file"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
    Class updateChanges:false.
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   312
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   313
    self fileIn:'patches'.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   314
10
claus
parents: 8
diff changeset
   315
    "look for a '-e filename' argument - this will force evaluation of
claus
parents: 8
diff changeset
   316
     filename only, no standard startup"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   318
    idx := Arguments indexOf:'-e'.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   319
    idx ~~ 0 ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   320
        self fileIn:(Arguments at:idx + 1).
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   321
        self exit
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   322
    ].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   323
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   324
    (self fileIn:((Arguments at:1) , '.rc')) ifFalse:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   325
        "no .rc file where executable is; try default smalltalk.rc"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   326
        self fileIn:'smalltalk.rc'
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   327
    ].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   328
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   329
    Class updateChanges:true.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   330
a27a279701f8 Initial revision
claus
parents:
diff changeset
   331
    SilentLoading ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   332
        Transcript showCr:(self hello).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   333
        Transcript showCr:(self copyright).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   334
        Transcript cr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   335
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   336
a27a279701f8 Initial revision
claus
parents:
diff changeset
   337
    Initializing := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
    DemoMode ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   339
        Transcript showCr:'Unlicensed demo mode with limitations.'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   341
10
claus
parents: 8
diff changeset
   342
    "let display install itself into Processors dispatch"
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   343
    Display notNil ifTrue:[
10
claus
parents: 8
diff changeset
   344
        Display startDispatch.
claus
parents: 8
diff changeset
   345
claus
parents: 8
diff changeset
   346
        "this is a leftover - will vanish"
claus
parents: 8
diff changeset
   347
        ModalDisplay notNil ifTrue:[
claus
parents: 8
diff changeset
   348
            ModalDisplay startDispatch
claus
parents: 8
diff changeset
   349
        ]
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   350
    ].
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   351
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   352
    (StartupClass notNil and:[StartupSelector notNil]) ifTrue:[
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   353
        StartupClass perform:StartupSelector withArguments:StartupArguments.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   354
    ].
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   355
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
    [self saveMainLoop] whileTrue:[ ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
    "done"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   359
a27a279701f8 Initial revision
claus
parents:
diff changeset
   360
    self exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   361
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
a27a279701f8 Initial revision
claus
parents:
diff changeset
   363
restart
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   364
    "startup after an image has been loaded;
10
claus
parents: 8
diff changeset
   365
     there are three change-notifications made to dependents of ObjectMemory,
claus
parents: 8
diff changeset
   366
     which allow a stepwise re-init: #earlyRestart, #restarted and #returnFromSnapshot.
claus
parents: 8
diff changeset
   367
     #earlyRestart is send first, nothing has been setup yet.
claus
parents: 8
diff changeset
   368
                   (should be used to flush all device dependent entries)
claus
parents: 8
diff changeset
   369
     #restarted is send right after.
claus
parents: 8
diff changeset
   370
                   (should be used to recreate external resources (fds, bitmaps etc)
claus
parents: 8
diff changeset
   371
     #returnFromSnapshot is sent last
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
   372
                   (should be used to restart processes, reOpen Streams which cannot
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
   373
                    be automatically be reopened (i.e. Sockets, Pipes) and so on.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   374
     "
10
claus
parents: 8
diff changeset
   375
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   376
    |deb insp|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   377
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
    Initializing := true.
10
claus
parents: 8
diff changeset
   379
    Processor reInitialize.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   380
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   381
    "temporary switch back to dumb interface - to handle errors while view-stuff is
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   382
     not yet reinitialized"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
a27a279701f8 Initial revision
claus
parents:
diff changeset
   384
    insp := Inspector.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   385
    deb := Debugger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   386
    Inspector := MiniInspector.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   387
    Debugger := MiniDebugger.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   388
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   389
    ObjectMemory changed:#earlyRestart.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   390
    ObjectMemory changed:#restarted.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   393
     some must be reinitialized before ...
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
     - sorry, but order is important
a27a279701f8 Initial revision
claus
parents:
diff changeset
   395
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
a27a279701f8 Initial revision
claus
parents:
diff changeset
   397
    Workstation reinitialize.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   398
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
    ObjectMemory changed:#returnFromSnapshot.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
    OperatingSystem enableUserInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
    OperatingSystem enableSignalInterrupts.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
10
claus
parents: 8
diff changeset
   404
    "and back to real interface"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
    Inspector := insp.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
    Debugger := deb.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
    Initializing := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   409
a27a279701f8 Initial revision
claus
parents:
diff changeset
   410
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
     if there is no Transcript, go to stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   412
    "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   413
    Transcript isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   414
        self initStandardStreams.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
        Transcript := Stderr
a27a279701f8 Initial revision
claus
parents:
diff changeset
   416
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
a27a279701f8 Initial revision
claus
parents:
diff changeset
   418
    Transcript cr.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   419
    Transcript showCr:('Smalltalk restarted from:' , ImageName).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   420
    DemoMode ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   421
        Transcript showCr:'Unlicensed demo mode with limitations.'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   424
    "
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   425
     give user a chance to re-customize things
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   426
    "
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   427
    Class updateChanges:false.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   428
    (self fileIn:((Arguments at:1) , '_r.rc')) ifFalse:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   429
        "no _r.rc file where executable is; try default smalltalk_r.rc"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   430
        self fileIn:'smalltalk_r.rc'
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   431
    ].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   432
    Class updateChanges:true.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   433
10
claus
parents: 8
diff changeset
   434
    "if there is a display, make it add itself to the dispatcher"
claus
parents: 8
diff changeset
   435
    Display notNil ifTrue:[
claus
parents: 8
diff changeset
   436
        Display startDispatch.
claus
parents: 8
diff changeset
   437
        ModalDisplay notNil ifTrue:[
claus
parents: 8
diff changeset
   438
            ModalDisplay startDispatch
claus
parents: 8
diff changeset
   439
        ]
claus
parents: 8
diff changeset
   440
    ].
claus
parents: 8
diff changeset
   441
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   442
    "this allows firing an application by defining
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   443
     these two globals during snapshot ... or in main"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   445
    (StartupClass notNil and:[StartupSelector notNil]) ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   446
        "allow customization by reading an image specific rc-file"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   447
        ImageName notNil ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   448
            (ImageName endsWith:'.img') ifTrue:[
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   449
                self fileIn:((ImageName copyTo:(ImageName size - 4)), '.rc')
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   450
            ] ifFalse:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   451
                self fileIn:(ImageName , '.rc')
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   452
            ]
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   453
        ].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   454
        StartupClass perform:StartupSelector withArguments:StartupArguments.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   455
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   457
    [self saveMainLoop] whileTrue:[ ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
    self exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
a27a279701f8 Initial revision
claus
parents:
diff changeset
   462
saveMainLoop
a27a279701f8 Initial revision
claus
parents:
diff changeset
   463
    "main dispatching loop - exits with true for a bad exit (to restart),
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   464
     false for real exit."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   465
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
    Smalltalk at:#SignalCatchBlock put:[^ true].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
a27a279701f8 Initial revision
claus
parents:
diff changeset
   468
    "if view-classes exist, start dispatching;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   469
     otherwise go into a read-eval-print loop"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
    Display notNil ifTrue:[
10
claus
parents: 8
diff changeset
   472
        Processor dispatchLoop
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   473
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   474
        self readEvalPrint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   477
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   478
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
readEvalPrint
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   480
    "simple read-eval-print loop for non-graphical Minitalk"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
a27a279701f8 Initial revision
claus
parents:
diff changeset
   482
    |text|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   483
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
    'ST- ' print.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   485
    Stdin skipSeparators.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   486
    text := Stdin nextChunk.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   487
    [text notNil] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   488
        (Compiler evaluate:text) printNewline.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
        'ST- ' print.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
        text := Stdin nextChunk
a27a279701f8 Initial revision
claus
parents:
diff changeset
   491
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   492
    '' printNewline
a27a279701f8 Initial revision
claus
parents:
diff changeset
   493
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
a27a279701f8 Initial revision
claus
parents:
diff changeset
   495
!Smalltalk class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   496
a27a279701f8 Initial revision
claus
parents:
diff changeset
   497
at:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   498
    "retrieve the value stored under aKey, a symbol"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   499
a27a279701f8 Initial revision
claus
parents:
diff changeset
   500
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   501
    extern OBJ _GETGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   502
a27a279701f8 Initial revision
claus
parents:
diff changeset
   503
    RETURN ( _GETGLOBAL(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   504
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   505
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   506
a27a279701f8 Initial revision
claus
parents:
diff changeset
   507
at:aKey ifAbsent:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   508
    "retrieve the value stored under aKey.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   509
     If there is none stored this key, return the value of
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
     the evaluation of aBlock"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   511
a27a279701f8 Initial revision
claus
parents:
diff changeset
   512
    (self includesKey:aKey) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
        ^ self at:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   514
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   515
    ^ aBlock value
a27a279701f8 Initial revision
claus
parents:
diff changeset
   516
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   517
a27a279701f8 Initial revision
claus
parents:
diff changeset
   518
at:aKey put:aValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   519
    "store the argument aValue under aKey, a symbol"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   520
a27a279701f8 Initial revision
claus
parents:
diff changeset
   521
    CachedClasses := nil.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   522
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
    extern OBJ _SETGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
    RETURN ( _SETGLOBAL(aKey, aValue, (OBJ *)0) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   527
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   528
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   529
a27a279701f8 Initial revision
claus
parents:
diff changeset
   530
removeKey:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   531
    "remove the argument from the globals dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   532
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
    CachedClasses := nil.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   534
a27a279701f8 Initial revision
claus
parents:
diff changeset
   535
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   536
    extern OBJ _REMOVEGLOBAL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
a27a279701f8 Initial revision
claus
parents:
diff changeset
   538
    RETURN ( _REMOVEGLOBAL(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   539
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   540
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   541
a27a279701f8 Initial revision
claus
parents:
diff changeset
   542
includesKey:aKey
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
    "return true, if the key is known"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
    extern OBJ _KEYKNOWN();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
    RETURN ( _KEYKNOWN(aKey) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   550
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
keyAtValue:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
    "return the symbol under which anObject is stored - or nil"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   554
a27a279701f8 Initial revision
claus
parents:
diff changeset
   555
    self allKeysDo:[:aKey |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   556
        (self at:aKey) == anObject ifTrue:[^ aKey]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   558
a27a279701f8 Initial revision
claus
parents:
diff changeset
   559
    "Smalltalk keyAtValue:Object"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   560
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   561
a27a279701f8 Initial revision
claus
parents:
diff changeset
   562
keys
a27a279701f8 Initial revision
claus
parents:
diff changeset
   563
    "return a collection with all keys in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   564
a27a279701f8 Initial revision
claus
parents:
diff changeset
   565
    |keys|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   566
a27a279701f8 Initial revision
claus
parents:
diff changeset
   567
    keys := OrderedCollection new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   568
    self allKeysDo:[:k | keys add:k].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   569
    ^ keys
a27a279701f8 Initial revision
claus
parents:
diff changeset
   570
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   571
a27a279701f8 Initial revision
claus
parents:
diff changeset
   572
!Smalltalk class methodsFor:'copying'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   573
a27a279701f8 Initial revision
claus
parents:
diff changeset
   574
shallowCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   575
    "redefine copy - there is only one Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   576
a27a279701f8 Initial revision
claus
parents:
diff changeset
   577
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   578
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   579
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   580
simpleDeepCopy
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   581
    "redefine copy - there is only one Smalltalk dictionary"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   582
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   583
    ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   584
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   585
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   586
deepCopyUsing:aDictionary
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   587
    "redefine copy - there is only one Smalltalk dictionary"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   588
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   589
    ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   590
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   591
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   592
deepCopy
a27a279701f8 Initial revision
claus
parents:
diff changeset
   593
    "redefine copy - there is only one Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   594
a27a279701f8 Initial revision
claus
parents:
diff changeset
   595
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   596
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   597
a27a279701f8 Initial revision
claus
parents:
diff changeset
   598
!Smalltalk class methodsFor:'inspecting'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   599
a27a279701f8 Initial revision
claus
parents:
diff changeset
   600
inspect
a27a279701f8 Initial revision
claus
parents:
diff changeset
   601
    "redefined to launch a DictionaryInspector on the receiver
a27a279701f8 Initial revision
claus
parents:
diff changeset
   602
     (instead of the default InspectorView)."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   603
a27a279701f8 Initial revision
claus
parents:
diff changeset
   604
    DictionaryInspectorView isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   605
        super inspect
a27a279701f8 Initial revision
claus
parents:
diff changeset
   606
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   607
        DictionaryInspectorView openOn:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   608
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   609
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   610
a27a279701f8 Initial revision
claus
parents:
diff changeset
   611
!Smalltalk class methodsFor:'misc stuff'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   612
a27a279701f8 Initial revision
claus
parents:
diff changeset
   613
addExitBlock:aBlock
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   614
    "add a block to be executed when Smalltalk finishes.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   615
     This feature is currently not used anywhere - but could be useful for
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   616
     cleanup in stand alone applications."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   617
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   618
    ExitBlocks isNil ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   619
        ExitBlocks := Array with:aBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   620
    ] ifFalse:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   621
        ExitBlocks add:aBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   622
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   623
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   624
a27a279701f8 Initial revision
claus
parents:
diff changeset
   625
exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   626
    "finish Smalltalk system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   627
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   628
    ExitBlocks notNil ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   629
        ExitBlocks do:[:aBlock |
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   630
            aBlock value
a27a279701f8 Initial revision
claus
parents:
diff changeset
   631
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   632
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   633
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   634
    mainExit(0);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   635
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   636
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   637
    OperatingSystem exit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   638
a27a279701f8 Initial revision
claus
parents:
diff changeset
   639
    "Smalltalk exit"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   640
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   641
a27a279701f8 Initial revision
claus
parents:
diff changeset
   642
sleep:aDelay
a27a279701f8 Initial revision
claus
parents:
diff changeset
   643
    "wait for aDelay seconds"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   644
a27a279701f8 Initial revision
claus
parents:
diff changeset
   645
    OperatingSystem sleep:aDelay
a27a279701f8 Initial revision
claus
parents:
diff changeset
   646
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   647
a27a279701f8 Initial revision
claus
parents:
diff changeset
   648
!Smalltalk class methodsFor:'debugging'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   649
a27a279701f8 Initial revision
claus
parents:
diff changeset
   650
printStackBacktrace
a27a279701f8 Initial revision
claus
parents:
diff changeset
   651
    "print a stack backtrace"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   652
a27a279701f8 Initial revision
claus
parents:
diff changeset
   653
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   654
    printStack(__context);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   655
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   656
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   657
a27a279701f8 Initial revision
claus
parents:
diff changeset
   658
fatalAbort
a27a279701f8 Initial revision
claus
parents:
diff changeset
   659
    "abort program and dump core"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   660
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   661
    fatal0(__context, "abort");
a27a279701f8 Initial revision
claus
parents:
diff changeset
   662
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   663
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   664
a27a279701f8 Initial revision
claus
parents:
diff changeset
   665
statistic
a27a279701f8 Initial revision
claus
parents:
diff changeset
   666
    "print some statistic data"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   667
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   668
    statistic();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   669
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   670
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   671
a27a279701f8 Initial revision
claus
parents:
diff changeset
   672
debugOn
10
claus
parents: 8
diff changeset
   673
    "temporary - turns some tracing on"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   674
a27a279701f8 Initial revision
claus
parents:
diff changeset
   675
    "LookupTrace := true.   "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   676
    MessageTrace := true.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   677
    "AllocTrace := true.     "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   678
    ObjectMemory flushInlineCaches
a27a279701f8 Initial revision
claus
parents:
diff changeset
   679
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   680
a27a279701f8 Initial revision
claus
parents:
diff changeset
   681
debugOff
10
claus
parents: 8
diff changeset
   682
    "temporary - turns tracing off"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   683
a27a279701f8 Initial revision
claus
parents:
diff changeset
   684
    LookupTrace := nil.    
a27a279701f8 Initial revision
claus
parents:
diff changeset
   685
    MessageTrace := nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   686
    ". AllocTrace := nil     "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   687
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   688
a27a279701f8 Initial revision
claus
parents:
diff changeset
   689
executionDebugOn
10
claus
parents: 8
diff changeset
   690
    "temporary - turns tracing of interpreter on"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   691
a27a279701f8 Initial revision
claus
parents:
diff changeset
   692
    ExecutionTrace := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   693
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   694
a27a279701f8 Initial revision
claus
parents:
diff changeset
   695
executionDebugOff
10
claus
parents: 8
diff changeset
   696
    "temporary - turns tracing of interpreter off"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   697
a27a279701f8 Initial revision
claus
parents:
diff changeset
   698
    ExecutionTrace := nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   699
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   700
a27a279701f8 Initial revision
claus
parents:
diff changeset
   701
!Smalltalk class methodsFor:'looping'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   702
a27a279701f8 Initial revision
claus
parents:
diff changeset
   703
do:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   704
    "evaluate the argument, aBlock for all values in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   705
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   706
    __allGlobalsDo(&aBlock COMMA_CON);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   707
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   708
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   709
a27a279701f8 Initial revision
claus
parents:
diff changeset
   710
allKeysDo:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   711
    "evaluate the argument, aBlock for all keys in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   712
%{
a27a279701f8 Initial revision
claus
parents:
diff changeset
   713
    __allKeysDo(&aBlock COMMA_CON);
a27a279701f8 Initial revision
claus
parents:
diff changeset
   714
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   715
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   716
2
claus
parents: 1
diff changeset
   717
allBehaviorsDo:aBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   718
    "evaluate the argument, aBlock for all classes in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   719
a27a279701f8 Initial revision
claus
parents:
diff changeset
   720
    self allClasses do:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   721
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   722
2
claus
parents: 1
diff changeset
   723
allClassesDo:aBlock
claus
parents: 1
diff changeset
   724
    "evaluate the argument, aBlock for all classes in the system.
claus
parents: 1
diff changeset
   725
     Backward compatibility - use allBehaviorsDo: for ST-80 compatibility."
claus
parents: 1
diff changeset
   726
claus
parents: 1
diff changeset
   727
    ^ self allBehaviorsDo:aBlock
claus
parents: 1
diff changeset
   728
!
claus
parents: 1
diff changeset
   729
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   730
associationsDo:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   731
    "evaluate the argument, aBlock for all key/value pairs 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   732
     in the Smalltalk dictionary"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   733
a27a279701f8 Initial revision
claus
parents:
diff changeset
   734
    self allKeysDo:[:aKey |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   735
        aBlock value:(aKey -> (self at:aKey))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   736
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   737
a27a279701f8 Initial revision
claus
parents:
diff changeset
   738
    "Smalltalk associationsDo:[:assoc | assoc printNewline]"
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   739
!
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   740
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   741
keysAndValuesDo:aBlock
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   742
    "evaluate the two-arg block, aBlock for all keys and values"
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   743
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   744
    self allKeysDo:[:aKey |
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
   745
        aBlock value:aKey value:(self at:aKey)
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   746
    ]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   747
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   748
a27a279701f8 Initial revision
claus
parents:
diff changeset
   749
!Smalltalk class methodsFor:'queries'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   750
a27a279701f8 Initial revision
claus
parents:
diff changeset
   751
numberOfGlobals
a27a279701f8 Initial revision
claus
parents:
diff changeset
   752
    "return the number of global variables in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   753
a27a279701f8 Initial revision
claus
parents:
diff changeset
   754
    |tally|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   755
a27a279701f8 Initial revision
claus
parents:
diff changeset
   756
    tally := 0.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   757
    self do:[:obj | tally := tally + 1].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   758
    ^ tally
a27a279701f8 Initial revision
claus
parents:
diff changeset
   759
a27a279701f8 Initial revision
claus
parents:
diff changeset
   760
    "Smalltalk numberOfGlobals"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   761
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   762
a27a279701f8 Initial revision
claus
parents:
diff changeset
   763
cellAt:aName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   764
    "return the address of a global cell
a27a279701f8 Initial revision
claus
parents:
diff changeset
   765
     - used internally for compiler only"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   766
a27a279701f8 Initial revision
claus
parents:
diff changeset
   767
%{  /* NOCONTEXT */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   768
    extern OBJ _GETGLOBALCELL();
a27a279701f8 Initial revision
claus
parents:
diff changeset
   769
a27a279701f8 Initial revision
claus
parents:
diff changeset
   770
    RETURN ( _GETGLOBALCELL(aName) );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   771
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   772
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   773
a27a279701f8 Initial revision
claus
parents:
diff changeset
   774
references:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   775
    "return true, if I refer to the argument, anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   776
     must be reimplemented since Smalltalk is no real collection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   777
a27a279701f8 Initial revision
claus
parents:
diff changeset
   778
    self do:[:o |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   779
        (o == anObject) ifTrue:[^ true]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   780
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   781
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   782
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   783
a27a279701f8 Initial revision
claus
parents:
diff changeset
   784
allClasses
a27a279701f8 Initial revision
claus
parents:
diff changeset
   785
    "return a collection of all classes in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   786
a27a279701f8 Initial revision
claus
parents:
diff changeset
   787
    CachedClasses isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   788
        CachedClasses := IdentitySet new:400.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   789
        self do:[:anObject |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   790
            anObject notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   791
                (anObject isBehavior) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   792
                    CachedClasses add:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   793
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   794
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   795
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   796
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   797
    ^ CachedClasses
a27a279701f8 Initial revision
claus
parents:
diff changeset
   798
a27a279701f8 Initial revision
claus
parents:
diff changeset
   799
    "Smalltalk allClasses"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   800
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   801
a27a279701f8 Initial revision
claus
parents:
diff changeset
   802
classNames
a27a279701f8 Initial revision
claus
parents:
diff changeset
   803
    "return a collection of all classNames in the system"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   804
a27a279701f8 Initial revision
claus
parents:
diff changeset
   805
    ^ self allClasses collect:[:aClass | aClass name]
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   806
!
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   807
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   808
systemPath
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   809
    "return a collection of directorynames, where smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   810
     looks for system files (usually in subdirs such as resources,
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   811
     bitmaps, source etc.)"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   812
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   813
    ^ SystemPath
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   814
!
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   815
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   816
startupClass:aClass selector:aSymbol arguments:anArrayOrNil
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   817
    "set the class, selector and arguments to be performed when smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   818
     starts. Setting those before saving a snapshot, will make the saved
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   819
     image come up executing your application (instead of the normal mainloop)"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   820
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   821
    StartupClass := aClass.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   822
    StartupSelector := aSymbol.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   823
    StartupArguments := anArrayOrNil
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   824
!
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   825
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   826
startupClass
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   827
    "return the class, that will get the start message when smalltalk
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   828
     starts and its non-nil. Usually this is nil, but saving an image 
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   829
     with a non-nil StartupClass allows stand-alone applications"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   830
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   831
    ^ StartupClass
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   832
!
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   833
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   834
startupSelector
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   835
    "return the selector, that will be sent to StartupClass"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   836
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   837
    ^ StartupSelector
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   838
!
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   839
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   840
startupArguments
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   841
    "return the arguments passed to StartupClass"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   842
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   843
    ^ StartupArguments
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   844
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   845
a27a279701f8 Initial revision
claus
parents:
diff changeset
   846
!Smalltalk class methodsFor:'system management'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   847
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   848
renameClass:aClass to:newName
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   849
    "rename aClass to newName"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   850
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   851
    |oldName oldSym newSym names cSym value|
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   852
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   853
    oldName := aClass name.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   854
    oldSym := oldName asSymbol.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   855
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   856
    ((self at:oldSym) == aClass) ifFalse:[^ self].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   857
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   858
    "rename the class"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   859
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   860
    aClass setName:newName.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   861
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   862
    "and its meta"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   863
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   864
    aClass class setName:(newName , 'class').
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   865
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   866
    "store it in Smalltalk"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   867
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   868
    newSym := newName asSymbol.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   869
    self at:oldSym put:nil.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   870
    self removeKey:oldSym.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   871
    self at:newSym put:aClass.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   872
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   873
    "rename class variables"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   874
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   875
    names := aClass classVariableString asCollectionOfWords.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   876
    names do:[:name |
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   877
        cSym := (oldSym , ':' , name) asSymbol.
10
claus
parents: 8
diff changeset
   878
        value := self at:cSym.
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   879
        self at:cSym put:nil.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   880
        self removeKey:cSym.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   881
        cSym := (newSym , ':' , name) asSymbol.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   882
        self at:cSym put:value.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   883
    ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   884
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   885
    aClass addChangeRecordForClassRename:oldName to:newName
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   886
!
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   887
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   888
removeClass:aClass
a27a279701f8 Initial revision
claus
parents:
diff changeset
   889
    "remove the argument, aClass from the smalltalk dictionary;
2
claus
parents: 1
diff changeset
   890
     we have to flush the caches since these methods are now void.
claus
parents: 1
diff changeset
   891
     Also, class variables of aClass are removed."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   892
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   893
    |sym cSym names oldName|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   894
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   895
    oldName := aClass name.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   896
    sym := oldName asSymbol.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   897
    ((self at:sym) == aClass) ifFalse:[ ^ self].
2
claus
parents: 1
diff changeset
   898
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   899
    self at:sym put:nil. "nil it out for compiled accesses"
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   900
    self removeKey:sym. 
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   901
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   902
    "remove class variables"
2
claus
parents: 1
diff changeset
   903
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   904
    names := aClass classVariableString asCollectionOfWords.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   905
    names do:[:name |
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   906
        cSym := (sym , ':' , name) asSymbol.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   907
        self at:cSym asSymbol put:nil.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   908
        self removeKey:cSym
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   909
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   910
"
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   911
    actually could get along with less flushing
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   912
    (entries for aClass and subclasses only)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   913
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   914
    aClass allSubclassesDo:[:aSubclass |
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   915
        ObjectMemory flushInlineCachesForClass:aSubclass.
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   916
        ObjectMemory flushMethodCacheFor:aSubclass
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
   917
    ].
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   918
    ObjectMemory flushInlineCachesForClass:aClass.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   919
    ObjectMemory flushMethodCacheFor:aClass
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   920
"
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   921
    ObjectMemory flushInlineCaches.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   922
    ObjectMemory flushMethodCache.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
   923
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   924
    aClass addChangeRecordForClassRemove:oldName
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   925
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   926
a27a279701f8 Initial revision
claus
parents:
diff changeset
   927
browseChanges
a27a279701f8 Initial revision
claus
parents:
diff changeset
   928
    "startup a changes browser"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   929
a27a279701f8 Initial revision
claus
parents:
diff changeset
   930
    (self at:#ChangesBrowser) notNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   931
        ChangesBrowser start
a27a279701f8 Initial revision
claus
parents:
diff changeset
   932
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   933
        self error:'no ChangesBrowser'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   934
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   935
a27a279701f8 Initial revision
claus
parents:
diff changeset
   936
    "Smalltalk browseChanges "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   937
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   938
a27a279701f8 Initial revision
claus
parents:
diff changeset
   939
browseAllSelect:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   940
    "startup a browser for all methods for which aBlock returns true"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   941
a27a279701f8 Initial revision
claus
parents:
diff changeset
   942
    SystemBrowser browseAllSelect:aBlock
a27a279701f8 Initial revision
claus
parents:
diff changeset
   943
a27a279701f8 Initial revision
claus
parents:
diff changeset
   944
    " Smalltalk browseAllSelect:[:m | m literals isNil] "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   945
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   946
a27a279701f8 Initial revision
claus
parents:
diff changeset
   947
browseImplementorsOf:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   948
    "startup a browser for all methods implementing a particular message"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   949
a27a279701f8 Initial revision
claus
parents:
diff changeset
   950
    SystemBrowser browseImplementorsOf:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   951
a27a279701f8 Initial revision
claus
parents:
diff changeset
   952
    " Smalltalk browseImplementorsOf:#at:put: "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   953
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   954
a27a279701f8 Initial revision
claus
parents:
diff changeset
   955
browseAllCallsOn:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   956
    "startup a browser for all methods sending a particular message"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   957
a27a279701f8 Initial revision
claus
parents:
diff changeset
   958
    SystemBrowser browseAllCallsOn:aSelectorSymbol
a27a279701f8 Initial revision
claus
parents:
diff changeset
   959
a27a279701f8 Initial revision
claus
parents:
diff changeset
   960
    " Smalltalk browseAllCallsOn:#at:put: "
a27a279701f8 Initial revision
claus
parents:
diff changeset
   961
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   962
10
claus
parents: 8
diff changeset
   963
readAbbreviations
claus
parents: 8
diff changeset
   964
    "read classname to filename mappings from abbrev.stc.
claus
parents: 8
diff changeset
   965
     sigh - all for those poor sys5.3 people ..."
claus
parents: 8
diff changeset
   966
claus
parents: 8
diff changeset
   967
    |aStream line index thisName abbrev|
claus
parents: 8
diff changeset
   968
claus
parents: 8
diff changeset
   969
    CachedAbbreviations := Dictionary new.
claus
parents: 8
diff changeset
   970
    aStream := self systemFileStreamFor:'abbrev.stc'.
claus
parents: 8
diff changeset
   971
    aStream notNil ifTrue:[
claus
parents: 8
diff changeset
   972
        [aStream atEnd] whileFalse:[
claus
parents: 8
diff changeset
   973
            line := aStream nextLine.
claus
parents: 8
diff changeset
   974
            line notNil ifTrue:[
claus
parents: 8
diff changeset
   975
                (line countWords == 2) ifTrue:[
claus
parents: 8
diff changeset
   976
                    index := line indexOfSeparatorStartingAt:1.
claus
parents: 8
diff changeset
   977
                    (index ~~ 0) ifTrue:[
claus
parents: 8
diff changeset
   978
                        thisName := line copyFrom:1 to:(index - 1).
claus
parents: 8
diff changeset
   979
                        abbrev := (line copyFrom:index) withoutSeparators.
claus
parents: 8
diff changeset
   980
                        CachedAbbreviations at:thisName put:abbrev.
claus
parents: 8
diff changeset
   981
                    ]
claus
parents: 8
diff changeset
   982
                ]
claus
parents: 8
diff changeset
   983
            ]
claus
parents: 8
diff changeset
   984
        ].
claus
parents: 8
diff changeset
   985
        aStream close
claus
parents: 8
diff changeset
   986
    ]
claus
parents: 8
diff changeset
   987
!
claus
parents: 8
diff changeset
   988
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   989
systemFileStreamFor:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
   990
    "search aFileName in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   991
     return a fileStream or nil if not found"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   992
a27a279701f8 Initial revision
claus
parents:
diff changeset
   993
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   994
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   995
    (aFileName startsWith:'/') ifTrue:[
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   996
        "dont use path for absolute file names"
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   997
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   998
        ^ FileStream readonlyFileNamed:aFileName
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
   999
    ].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1000
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1001
    SystemPath do:[:dirName |
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1002
        aStream := FileStream readonlyFileNamed:(dirName , '/' , aFileName).
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1003
        aStream notNil ifTrue:[^ aStream]
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1004
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1005
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1006
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1007
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1008
fileNameForClass:aClassName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1009
    "return a good filename for aClassName -
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1010
     using abbreviation file if there is one"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1011
10
claus
parents: 8
diff changeset
  1012
    |fileName abbrev|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1013
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1014
    fileName := aClassName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1015
10
claus
parents: 8
diff changeset
  1016
    "first look, if the class exists and has a fileName"
claus
parents: 8
diff changeset
  1017
24
20cfbafcd0a3 *** empty log message ***
claus
parents: 13
diff changeset
  1018
" later ... - compiler should put the source file name into the class
10
claus
parents: 8
diff changeset
  1019
    Symbol hasInterned:aClassName ifTrue:[:sym |
claus
parents: 8
diff changeset
  1020
        |class|
claus
parents: 8
diff changeset
  1021
claus
parents: 8
diff changeset
  1022
        (Smalltalk includesKey:sym) ifTrue:[
claus
parents: 8
diff changeset
  1023
            class := Smalltalk at:sym.
claus
parents: 8
diff changeset
  1024
            class isClass ifTrue:[
claus
parents: 8
diff changeset
  1025
                abbrev := class classFileName.
claus
parents: 8
diff changeset
  1026
            ]
claus
parents: 8
diff changeset
  1027
        ]
claus
parents: 8
diff changeset
  1028
    ].
claus
parents: 8
diff changeset
  1029
"
claus
parents: 8
diff changeset
  1030
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1031
    "look for abbreviation"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1032
10
claus
parents: 8
diff changeset
  1033
    CachedAbbreviations isNil ifTrue:[
claus
parents: 8
diff changeset
  1034
        self readAbbreviations
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1035
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1036
10
claus
parents: 8
diff changeset
  1037
    abbrev := CachedAbbreviations at:fileName ifAbsent:[nil].
claus
parents: 8
diff changeset
  1038
    abbrev notNil ifTrue:[^ abbrev].
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1039
10
claus
parents: 8
diff changeset
  1040
    "no abbreviation found - if its a short name, take it"
claus
parents: 8
diff changeset
  1041
claus
parents: 8
diff changeset
  1042
    OperatingSystem maxFileNameLength < (fileName size + 3) ifTrue:[
claus
parents: 8
diff changeset
  1043
        "this will only be triggered on sys5.3 type systems"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1044
        self error:'cant find short for ' , fileName , ' in abbreviation file'
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1045
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1046
    ^ fileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1047
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1048
2
claus
parents: 1
diff changeset
  1049
classNameForFile:aFileName
10
claus
parents: 8
diff changeset
  1050
    "return the className which corresponds to an abbreviated fileName,
claus
parents: 8
diff changeset
  1051
     or nil if no special translation applies. The given filename arg should
claus
parents: 8
diff changeset
  1052
     NOT include any suffix such as '.st'."
2
claus
parents: 1
diff changeset
  1053
10
claus
parents: 8
diff changeset
  1054
    CachedAbbreviations isNil ifTrue:[
claus
parents: 8
diff changeset
  1055
        self readAbbreviations
2
claus
parents: 1
diff changeset
  1056
    ].
claus
parents: 1
diff changeset
  1057
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1058
    ^ CachedAbbreviations keyAtValue:aFileName ifAbsent:[aFileName].
2
claus
parents: 1
diff changeset
  1059
claus
parents: 1
diff changeset
  1060
    "Smalltalk classNameForFile:'DrawObj'"
claus
parents: 1
diff changeset
  1061
!
claus
parents: 1
diff changeset
  1062
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1063
fileInClassObject:aClassName from:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1064
    "read in the named object file - look for it in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1065
     return true if ok, false if failed"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1066
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1067
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1068
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1069
    ObjectFileLoader isNil ifTrue:[^ false].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1070
    aStream := self systemFileStreamFor:aFileName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1071
    aStream isNil ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1072
    aStream close.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1073
10
claus
parents: 8
diff changeset
  1074
    ^ (ObjectFileLoader loadClass:aClassName fromObjectFile:aFileName) notNil
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1075
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1076
    " Smalltalk fileInClassObject:'AbstractPath' from:'../goodies/Paths/AbstrPath.o' "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1077
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1078
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1079
fileIn:aFileName
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1080
    "read in the named file - look for it in some standard places;
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1081
     return true if ok, false if failed"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1082
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1083
    |aStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1084
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1085
    aStream := self systemFileStreamFor:aFileName.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1086
    aStream isNil ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1087
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1088
    [aStream fileIn] valueNowOrOnUnwindDo:[aStream close].
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1089
    ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1090
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1091
    "Smalltalk fileIn:'games/TicTacToe.st'"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1092
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1093
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1094
fileInChanges
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1095
    "read in the last changes file - bringing the system to the state it
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1096
     had when left the last time"
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1097
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1098
    |upd|
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1099
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1100
    "tell Class to NOT update the changes file now ..."
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1101
    upd := Class updateChanges:false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1102
    [self fileIn:'changes'] valueNowOrOnUnwindDo:[Class updateChanges:upd]
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1103
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1104
    "Smalltalk fileInChanges "
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1105
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1106
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1107
fileInClass:aClassName
10
claus
parents: 8
diff changeset
  1108
    "find a source/object file for aClassName and -if found - load it.
claus
parents: 8
diff changeset
  1109
     search is in some standard places"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1110
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1111
    |fName newClass upd ok|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1112
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1113
    upd := Class updateChanges:false.
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1114
    [
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1115
        ok := self fileIn:('fileIn/' , aClassName , '.ld').
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1116
        ObjectFileLoader notNil ifTrue:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1117
            ok ifFalse:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1118
                ok := self fileInClassObject:aClassName from:('binary/' , aClassName, '.so').
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1119
            ].
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1120
            ok ifFalse:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1121
                ok := self fileInClassObject:aClassName from:('binary/' , aClassName, '.o').
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1122
            ].
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1123
        ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1124
        ok ifFalse:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1125
            ok := self fileIn:(aClassName , '.st')
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1126
        ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1127
        ok ifFalse:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1128
            ok := self fileIn:('source/' , aClassName , '.st')
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1129
        ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1130
        ok ifFalse:[
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1131
            fName := self fileNameForClass:aClassName.
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1132
            fName notNil ifTrue:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1133
                ok := self fileIn:('fileIn/' , fName , '.ld').
42
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1134
                ObjectFileLoader notNil ifTrue:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1135
                    ok ifFalse:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1136
                        ok := self fileInClassObject:aClassName from:('binary/' , fName, '.so')
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1137
                    ].
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1138
                    ok ifFalse:[
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1139
                        ok := self fileInClassObject:aClassName from:('binary/' , fName, '.o')
e33491f6f260 *** empty log message ***
claus
parents: 27
diff changeset
  1140
                    ].
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1141
                ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1142
                ok ifFalse:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1143
                    ok := self fileIn:(fName , '.st')
8
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1144
                ].
639f407faddd last version before big change in dispatch
claus
parents: 7
diff changeset
  1145
                ok ifFalse:[
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1146
                    ok := self fileIn:('source/' , fName , '.st')
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1147
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1148
            ]
7
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1149
        ]
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1150
    ] valueNowOrOnUnwindDo:[Class updateChanges:upd].
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1151
    newClass := self at:(aClassName asSymbol).
bf6f603119df final release before Dispatcher
claus
parents: 5
diff changeset
  1152
    (newClass notNil and:[newClass implements:#initialize]) ifTrue:[newClass initialize]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1153
! !
2
claus
parents: 1
diff changeset
  1154
claus
parents: 1
diff changeset
  1155
!Smalltalk class methodsFor: 'binary storage'!
claus
parents: 1
diff changeset
  1156
claus
parents: 1
diff changeset
  1157
addGlobalsTo: globalDictionary manager: manager
claus
parents: 1
diff changeset
  1158
    | pools |
claus
parents: 1
diff changeset
  1159
    pools _ Set new.
claus
parents: 1
diff changeset
  1160
    self associationsDo: [:assoc|
claus
parents: 1
diff changeset
  1161
        assoc value == self ifFalse:[
claus
parents: 1
diff changeset
  1162
            assoc value isClass ifTrue: [
claus
parents: 1
diff changeset
  1163
                assoc value addGlobalsTo: globalDictionary manager: manager.
claus
parents: 1
diff changeset
  1164
                "pools addAll: assoc value sharedPools"
claus
parents: 1
diff changeset
  1165
            ] ifFalse: [
claus
parents: 1
diff changeset
  1166
                globalDictionary at: assoc put: self
claus
parents: 1
diff changeset
  1167
            ].
claus
parents: 1
diff changeset
  1168
            assoc value isNil ifFalse:[
claus
parents: 1
diff changeset
  1169
                globalDictionary at: assoc value put: self
claus
parents: 1
diff changeset
  1170
            ]
claus
parents: 1
diff changeset
  1171
        ]
claus
parents: 1
diff changeset
  1172
    ].
claus
parents: 1
diff changeset
  1173
claus
parents: 1
diff changeset
  1174
    pools do: [:poolDictionary|
claus
parents: 1
diff changeset
  1175
        poolDictionary addGlobalsTo: globalDictionary manager: manager
claus
parents: 1
diff changeset
  1176
    ]
claus
parents: 1
diff changeset
  1177
!
claus
parents: 1
diff changeset
  1178
claus
parents: 1
diff changeset
  1179
storeBinaryDefinitionOf: anObject on: stream manager: manager
claus
parents: 1
diff changeset
  1180
    | string |
claus
parents: 1
diff changeset
  1181
claus
parents: 1
diff changeset
  1182
    anObject class == Association ifTrue: [
claus
parents: 1
diff changeset
  1183
        string := 'Smalltalk associationAt: ', anObject key storeString
claus
parents: 1
diff changeset
  1184
    ] ifFalse: [
claus
parents: 1
diff changeset
  1185
        string := 'Smalltalk at: ', (self keyAtValue: anObject) storeString
claus
parents: 1
diff changeset
  1186
    ].
claus
parents: 1
diff changeset
  1187
    stream nextNumber: 2 put: string size.
claus
parents: 1
diff changeset
  1188
    string do: [:char| stream nextPut: char asciiValue]
claus
parents: 1
diff changeset
  1189
! !