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