StandaloneStartup.st
author Claus Gittinger <cg@exept.de>
Tue, 27 Sep 2016 15:25:15 +0200
changeset 20465 76cc1e60d2a3
parent 20428 95bc102e907a
child 20486 8e25a1394997
permissions -rw-r--r--
class: UnixOperatingSystem changed: #pathOfCommand: build order due to changed inheritance of ExecutionError etc.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20428
95bc102e907a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20392
diff changeset
     1
"{ Encoding: utf8 }"
95bc102e907a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20392
diff changeset
     2
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 2006 by eXept Software AG
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
17280
3b21c1a75d39 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 16307
diff changeset
    16
"{ NameSpace: Smalltalk }"
3b21c1a75d39 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 16307
diff changeset
    17
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
Object subclass:#StandaloneStartup
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:''
10772
13bb80f40496 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10636
diff changeset
    20
	classVariableNames:'Verbose CommandLineArguments'
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'System-Support'
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    25
StandaloneStartup class instanceVariableNames:'MutexHandle'
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    26
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    27
"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    28
 No other class instance variables are inherited by this class.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    29
"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    30
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    31
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!StandaloneStartup class methodsFor:'documentation'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
copyright
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 COPYRIGHT (c) 2006 by eXept Software AG
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
              All Rights Reserved
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
 This software is furnished under a license and may be used
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
 only in accordance with the terms of that license and with the
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
 inclusion of the above copyright notice.   This software may not
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 be provided or otherwise made available to, or used by, any
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
 other person.  No title to or ownership of the software is
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
 hereby transferred.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
documentation
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
"
17280
3b21c1a75d39 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 16307
diff changeset
    50
    When smalltalk is started as IDE (stx), the show starts in Smalltalk>>start.
19517
a6553bfe0451 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19205
diff changeset
    51
    In contrast, when a standAlone app is linked, 
a6553bfe0451 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19205
diff changeset
    52
    the show starts in the startup class's start method.
a6553bfe0451 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19205
diff changeset
    53
17280
3b21c1a75d39 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 16307
diff changeset
    54
    This class is a subclassable template class for a standalone GUI-application's startup.
19517
a6553bfe0451 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19205
diff changeset
    55
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    For your own stand alone programs, define a subclass of this, 
12335
af9a7bc14d6a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 11807
diff changeset
    57
    and redefine the #main: method there.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    (of course, the other methods can also be redefined.)
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    [author:]
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        Claus Gittinger
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    [start with:]
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        <yourNamehere>Startup start
10886
f5ce5c02e1a7 comments
Claus Gittinger <cg@exept.de>
parents: 10773
diff changeset
    65
f5ce5c02e1a7 comments
Claus Gittinger <cg@exept.de>
parents: 10773
diff changeset
    66
    [see also:]
f5ce5c02e1a7 comments
Claus Gittinger <cg@exept.de>
parents: 10773
diff changeset
    67
        Smalltalk
f5ce5c02e1a7 comments
Claus Gittinger <cg@exept.de>
parents: 10773
diff changeset
    68
        GetOpt
f5ce5c02e1a7 comments
Claus Gittinger <cg@exept.de>
parents: 10773
diff changeset
    69
        ReadEvalPrintLoop
19517
a6553bfe0451 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19205
diff changeset
    70
        StandaloneStartupHeadless
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    72
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    73
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    74
howToDealWithMultipleApplicationInstances
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    75
"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    76
    please read the comment in the corresponding ApplicationModel class-documentation method.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
    77
"
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    78
!
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    79
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    80
whichMethodsToRedefine
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    81
"
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    82
    main:argv
20428
95bc102e907a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20392
diff changeset
    83
        that's the actual program.
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    84
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    85
    suppressRCFileReading
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    86
        false here; redefine to return true, to disable the rc-file reading.
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    87
        you loose the chance of configuration, but lock the user out from any access to any smalltalk
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    88
        (if you have a user-phobia)
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    89
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    90
    allowDebugOption
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
    91
        false here; redefine to return true, to enable the --debug startup option.
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
    92
        if disabled, you loose the chance of debugging, but lock the user out from any access to any smalltalk
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    93
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    94
    allowScriptingOption
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
    95
        false here; redefine to return true, to enable the --scripting startup option.
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
    96
        if disabled, you loose the chance of remote control, but lock the user out from any access to any smalltalk
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    97
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
    98
"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!StandaloneStartup class methodsFor:'initialization'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
initialize
11360
e309e560dcee *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11359
diff changeset
   104
    "/ Verbose := true.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    Verbose := false.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   108
!StandaloneStartup class methodsFor:'debugging support'!
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   109
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   110
dumpCoverageInformation
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   111
    "if the --coverage argument was given, dump that information now.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   112
     This is invoked via an exit block, when smalltalk terminates"
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   113
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   114
    "/ count instrumented vs. non-instrumented classes
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   115
    |nClasses nMethods 
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   116
     locOverall locExecuted locUnexecuted locInstrumented locUninstrumented
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   117
     locCovered locUncovered
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   118
     nInstrumentedClasses nUninstrumentedClasses nPartiallyInstrumentedClasses
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   119
     nInstrumentedMethods nUninstrumentedMethods 
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   120
     nClassesCompletelyCovered nClassesPartiallyCovered nClassesUncovered
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   121
     nMethodsCompletelyCovered nMethodsPartiallyCovered nMethodsUncovered|
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   122
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   123
    nInstrumentedClasses := nUninstrumentedClasses := nPartiallyInstrumentedClasses := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   124
    nInstrumentedMethods := nUninstrumentedMethods := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   125
    nClasses := nMethods := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   126
    locOverall := locCovered := locUncovered := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   127
    locInstrumented := locUninstrumented := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   128
    locExecuted := locUnexecuted := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   129
    nClassesCompletelyCovered := nClassesPartiallyCovered := nClassesUncovered := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   130
    nMethodsCompletelyCovered := nMethodsPartiallyCovered := nMethodsUncovered := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   131
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   132
    Smalltalk allClassesDo:[:eachClass |
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   133
        |nInstrumentedMethodsInClass nUninstrumentedMethodsInClass
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   134
         nMethodsCompletelyCoveredInClass nMethodsPartiallyCoveredInClass nMethodsUncoveredInClass
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   135
         locInstrumentedMethodsInClass locUninstrumentedMethodsInClass
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   136
         locExecutedInClass locUnexecutedInClass locPartiallyExecutedInClass|
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   137
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   138
        nMethodsCompletelyCoveredInClass := nMethodsPartiallyCoveredInClass := nMethodsUncoveredInClass := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   139
        nInstrumentedMethodsInClass := nUninstrumentedMethodsInClass := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   140
        locInstrumentedMethodsInClass := locUninstrumentedMethodsInClass := 0.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   141
        eachClass instAndClassMethodsDo:[:mthd |
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   142
            |locMethod|
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   143
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   144
            nMethods := nMethods + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   145
            locMethod := 0. "/ mthd source asCollectionOfLines size.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   146
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   147
            mthd isInstrumented ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   148
                nInstrumentedMethodsInClass := nInstrumentedMethodsInClass + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   149
                locInstrumentedMethodsInClass := locInstrumentedMethodsInClass + locMethod.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   150
                mthd hasBeenCalled ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   151
                    mthd haveAllBlocksBeenExecuted ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   152
                        "/ fully covered
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   153
                        nMethodsCompletelyCoveredInClass := nMethodsCompletelyCoveredInClass + 1
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   154
                    ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   155
                        "/ partially covered
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   156
                        nMethodsPartiallyCoveredInClass := nMethodsPartiallyCoveredInClass + 1
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   157
                    ]
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   158
                ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   159
                    "/ completely uncovered
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   160
                    nMethodsUncoveredInClass := nMethodsUncoveredInClass + 1
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   161
                ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   162
            ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   163
                nUninstrumentedMethodsInClass := nUninstrumentedMethodsInClass + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   164
                locUninstrumentedMethodsInClass := locUninstrumentedMethodsInClass + locMethod.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   165
            ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   166
        ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   167
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   168
        nInstrumentedMethods := nInstrumentedMethods + nInstrumentedMethodsInClass.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   169
        nUninstrumentedMethods := nUninstrumentedMethods + nUninstrumentedMethodsInClass.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   170
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   171
        nMethodsCompletelyCovered := nMethodsCompletelyCovered + nMethodsCompletelyCoveredInClass.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   172
        nMethodsUncovered := nMethodsUncovered + nMethodsUncoveredInClass.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   173
        nMethodsPartiallyCovered := nMethodsPartiallyCovered + nMethodsPartiallyCoveredInClass.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   174
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   175
        nClasses := nClasses + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   176
        nInstrumentedMethodsInClass == 0 ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   177
            nUninstrumentedMethodsInClass == 0 ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   178
                "/ empty class - do not count
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   179
            ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   180
                "/ completely uninstrumented
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   181
                nUninstrumentedClasses := nUninstrumentedClasses + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   182
            ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   183
        ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   184
            nUninstrumentedMethodsInClass == 0 ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   185
                "/ completely instrumented
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   186
                nInstrumentedClasses := nInstrumentedClasses + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   187
            ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   188
                "/ part/part
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   189
                nPartiallyInstrumentedClasses := nPartiallyInstrumentedClasses + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   190
            ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   191
        ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   192
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   193
        nMethodsCompletelyCoveredInClass > 0 ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   194
            nClassesCompletelyCovered := nClassesCompletelyCovered + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   195
        ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   196
            nMethodsPartiallyCoveredInClass > 0 ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   197
                nClassesPartiallyCovered := nClassesPartiallyCovered + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   198
            ] ifFalse:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   199
                nClassesUncovered := nClassesUncovered + 1.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   200
            ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   201
        ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   202
    ].
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   203
    
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   204
    Stderr nextPutLine:'Coverage info:'.
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   205
    Stderr nextPutLine:('  Classes, overall: %1' bindWith:nClasses).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   206
    Stderr nextPutLine:('  Classes, instrumented: %1 (%2%%)' bindWith:nInstrumentedClasses with:((nInstrumentedClasses / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   207
    Stderr nextPutLine:('  Classes, uninstrumented: %1 (%2%%)' bindWith:nUninstrumentedClasses with:((nUninstrumentedClasses / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   208
    Stderr nextPutLine:('  Classes, partially instrumented: %1 (%2%%)' bindWith:nPartiallyInstrumentedClasses with:((nPartiallyInstrumentedClasses / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   209
    Stderr nextPutLine:('  Classes, covered: %1 (%2%%)' bindWith:nClassesCompletelyCovered with:((nClassesCompletelyCovered / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   210
    Stderr nextPutLine:('  Classes, partially covered: %1 (%2%%)' bindWith:nClassesPartiallyCovered with:((nClassesPartiallyCovered / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   211
    Stderr nextPutLine:('  Classes, uncovered: %1 (%2%%)' bindWith:nClassesUncovered with:((nClassesUncovered / nClasses * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   212
    Stderr nextPutLine:('  Methods, overall: %1' bindWith:nMethods).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   213
    Stderr nextPutLine:('  Methods, instrumented: %1 (%2%%)' bindWith:nInstrumentedMethods with:((nInstrumentedMethods / nMethods * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   214
    Stderr nextPutLine:('  Methods, uninstrumented: %1 (%2%%)' bindWith:nUninstrumentedMethods with:((nUninstrumentedMethods / nMethods * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   215
    Stderr nextPutLine:('  Methods, covered: %1 (%2%%)' bindWith:nMethodsCompletelyCovered with:((nMethodsCompletelyCovered / nMethods * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   216
    Stderr nextPutLine:('  Methods, partially covered: %1 (%2%%)' bindWith:nMethodsPartiallyCovered with:((nMethodsPartiallyCovered / nMethods * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   217
    Stderr nextPutLine:('  Methods, uncovered: %1 (%2%%)' bindWith:nMethodsUncovered with:((nMethodsUncovered / nMethods * 100) asFixedPoint:1)).
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   218
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   219
    "
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   220
     self dumpCoverageInformation
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   221
    "
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   222
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   223
    "Created: / 24-05-2011 / 17:08:46 / cg"
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   224
    "Modified: / 25-05-2011 / 00:10:51 / cg"
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   225
!
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   226
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   227
handleCoverageMeasurementOptionsFromArguments:argv
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   228
    "handle the coverage measurement command line argument:
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   229
        --coverage 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   230
            [+/-]package: <package-pattern>       ... do / do not measure in package (regex match)
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   231
            [+/-]class: <class-pattern>           ... do / do not measure in class (regex match, including nameSpace)
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   232
            [+/-]method: <className>#<methodName> ... do / do not measure in method
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   233
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   234
     adds instrumentation code to all selected methods.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   235
    "
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   236
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   237
    |idx nextArg done doAdd addNames addMethodNames
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   238
     anyItem nMethodsInstrumented checkClass checkMethod coverageAction
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   239
     includedPackageNames excludedPackageNames 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   240
     includedClassNames excludedClassNames 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   241
     includedMethodNames excludedMethodNames|
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   242
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   243
"
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   244
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+package:' 'expeccoNET:*' '-class:' 'ExpeccoNET::ML' 'ExpeccoNET::LicenseString'  )
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   245
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+package:' 'stx:*')
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   246
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+package:' 'stx:libtool*')
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   247
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+class:' 'Tools::*' '-class:' 'Tools::StringSearchTool' )
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   248
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+class:' 'Tools::*Browser*'  )
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   249
 self handleCoverageMeasurementOptionsFromArguments:#('foo' '--coverage' '+method:' 'String#at:put:' 'String#at:')
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   250
"
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   251
    includedPackageNames := Set new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   252
    excludedPackageNames := Set new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   253
    includedClassNames := Set new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   254
    excludedClassNames := Set new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   255
    includedMethodNames := Dictionary new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   256
    excludedMethodNames := Dictionary new.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   257
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   258
    idx := argv indexOfAny:#('--coverage').
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   259
    idx == 0 ifTrue:[^ self ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   260
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   261
    addNames := [:collection |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   262
            [ 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   263
                nextArg := argv at:idx ifAbsent:nil.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   264
                nextArg notNil 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   265
                    and:[ ((nextArg startsWith:'+') or:[(nextArg startsWith:'-')]) not
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   266
                    and:[ (nextArg endsWith:':') not ]]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   267
            ] whileTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   268
                collection add:nextArg.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   269
                anyItem := true.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   270
                idx := idx + 1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   271
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   272
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   273
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   274
    addMethodNames := [:collection |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   275
            |idx2 className selector|
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   276
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   277
            [ 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   278
                nextArg := argv at:idx ifAbsent:nil.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   279
                nextArg notNil 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   280
                    and:[ ((nextArg startsWith:'+') or:[(nextArg startsWith:'-')]) not]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   281
            ] whileTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   282
                idx2 := nextArg indexOf:$#.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   283
                className := nextArg copyTo:idx2-1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   284
                selector := nextArg copyFrom:idx2+1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   285
                (collection at:className ifAbsentPut:[Set new]) add:selector.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   286
                anyItem := true.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   287
                idx := idx + 1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   288
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   289
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   290
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   291
    idx := idx + 1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   292
    done := false.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   293
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   294
    [ 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   295
        nextArg := argv at:idx ifAbsent:nil.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   296
        done not 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   297
            and:[ nextArg notNil 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   298
            and:[ ((nextArg startsWith:'+') or:[(nextArg startsWith:'-')]) ]]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   299
    ] whileTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   300
        idx := idx + 1.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   301
        doAdd := nextArg first == $+.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   302
        nextArg := nextArg copyFrom:2.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   303
        nextArg = 'package:' ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   304
            addNames value:(doAdd ifTrue:includedPackageNames ifFalse:excludedPackageNames). 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   305
        ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   306
            nextArg = 'class:' ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   307
                addNames value:(doAdd ifTrue:includedClassNames ifFalse:excludedClassNames). 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   308
            ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   309
                nextArg = 'method:' ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   310
                    addMethodNames value:(doAdd ifTrue:includedMethodNames ifFalse:excludedMethodNames).
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   311
                ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   312
                    done := true
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   313
                ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   314
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   315
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   316
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   317
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   318
    anyItem ifFalse:[ ^ self ].
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   319
    nMethodsInstrumented := 0.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   320
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   321
    coverageAction := [:aMethod |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   322
            ((aMethod sends:#subclassResponsibility) not
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   323
            and:[ aMethod hasPrimitiveCode not ]) ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   324
                Transcript show:'instrumenting '; showCR:aMethod.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   325
                aMethod mclass recompile:aMethod selector usingCompilerClass:InstrumentingCompiler.
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   326
                nMethodsInstrumented := nMethodsInstrumented + 1.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   327
            ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   328
                Transcript show:'skipped '; showCR:aMethod.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   329
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   330
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   331
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   332
    checkMethod := [:someMethod |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   333
            ((excludedMethodNames at:someMethod mclass name ifAbsent:#()) includes:someMethod selector) ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   334
                coverageAction value:someMethod
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   335
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   336
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   337
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   338
    checkClass := [:someClass |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   339
            someClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   340
                checkMethod value:mthd
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   341
            ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   342
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   343
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   344
    Smalltalk allClassesDo:[:eachClass |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   345
        (includedPackageNames contains:[:somePackagePattern| somePackagePattern match:(eachClass package)]) ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   346
            (excludedPackageNames contains:[:somePackagePattern| somePackagePattern match:(eachClass package)]) ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   347
                (excludedClassNames contains:[:someClassPattern| someClassPattern match:(eachClass name)]) ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   348
                    checkClass value:eachClass
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   349
                ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   350
            ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   351
        ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   352
            (includedClassNames contains:[:someClassPattern| someClassPattern match:(eachClass name)]) ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   353
                (excludedClassNames contains:[:someClassPattern| someClassPattern match:(eachClass name)]) ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   354
                    checkClass value:eachClass
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   355
                ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   356
            ] ifFalse:[ 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   357
                (Array with:eachClass theMetaclass with:eachClass) do:[:clsOrMeta |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   358
                    |selectors|
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   359
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   360
                    selectors := includedMethodNames at:clsOrMeta name ifAbsent:nil.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   361
                    selectors notEmptyOrNil ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   362
                        selectors do:[:eachSelector |
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   363
                            coverageAction value:(clsOrMeta compiledMethodAt:eachSelector asSymbol).
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   364
                        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   365
                    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   366
                ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   367
            ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   368
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   369
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   370
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   371
    nMethodsInstrumented ifTrue:[
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   372
        Transcript show:('%1 methods instrumented' bindWith:nMethodsInstrumented).
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   373
        Smalltalk addExitBlock:[ self dumpCoverageInformation ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   374
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   376
    "Created: / 24-05-2011 / 16:30:54 / cg"
13377
547eaa6ea65d changed:
Claus Gittinger <cg@exept.de>
parents: 13376
diff changeset
   377
    "Modified: / 24-05-2011 / 18:16:29 / cg"
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   378
! !
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   379
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   380
!StandaloneStartup class methodsFor:'defaults'!
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   381
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   382
allowCoverageMeasurementOption
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   383
    "enable/disable the --measureCoverage startup options.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   384
     The default is false, so standAlone apps do not support coverage measurements by default.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   385
     Can be redefined in subclasses to enable it 
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   386
     (but will need the libcomp and possibly the programming/oom packages to be present)"
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   387
13378
ed35cb03c4ed changed: #allowCoverageMeasurementOption
Claus Gittinger <cg@exept.de>
parents: 13377
diff changeset
   388
    ^ Smalltalk isStandAloneApp not
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   389
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   390
    "Created: / 24-05-2011 / 16:16:15 / cg"
13378
ed35cb03c4ed changed: #allowCoverageMeasurementOption
Claus Gittinger <cg@exept.de>
parents: 13377
diff changeset
   391
    "Modified: / 25-05-2011 / 00:21:18 / cg"
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   392
!
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   393
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   394
allowDebugOption
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   395
    "enable/disable the --debug startup option.
11363
de78c218cc36 comments
Claus Gittinger <cg@exept.de>
parents: 11361
diff changeset
   396
     Can be redefined in subclasses to enable it"
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   397
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   398
    ^ false
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   399
!
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   400
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   401
allowScriptingOption
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   402
    "enable/disable the --scripting startup option.
11363
de78c218cc36 comments
Claus Gittinger <cg@exept.de>
parents: 11361
diff changeset
   403
     Can be redefined in subclasses to enable it"
11361
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   404
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   405
    ^ false
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   406
!
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   407
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   408
suppressRCFileReading
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   409
    "enable/disable the rc-file reading (and also the --rcFileName option).
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   410
     If suppressed, there is no chance to interfere with the startup.
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   411
     Can be redefined in subclasses to disable it"
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   412
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   413
    ^ false
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   414
! !
36d809458749 defaults for allowDebug and allowScripting
Michael Beyl <mb@exept.de>
parents: 11360
diff changeset
   415
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
!StandaloneStartup class methodsFor:'helpers'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
11423
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   418
printInfo:msg
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   419
    Transcript 
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   420
        show:('%1 [info]: ' bindWith:(self applicationName));
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   421
        showCR:msg
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   422
!
25a27bdeff4c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11379
diff changeset
   423
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
redirectStandardStreams
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    Transcript := Stderr.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
13269
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   428
verbose
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   429
    ^ Verbose == true
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   430
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   431
    "Created: / 01-02-2011 / 15:52:47 / cg"
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   432
!
0009199731f6 added: #verbose
Claus Gittinger <cg@exept.de>
parents: 13130
diff changeset
   433
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
verboseInfo:msg
18180
177321c514a9 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 18179
diff changeset
   435
    Verbose == true ifTrue:[
177321c514a9 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 18179
diff changeset
   436
        self printInfo:msg
177321c514a9 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 18179
diff changeset
   437
    ]
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
    "Modified: / 19-09-2006 / 16:30:27 / cg"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
17707
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
   442
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   443
!StandaloneStartup class methodsFor:'multiple applications support'!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   444
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   445
applicationRegistryPath
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   446
    "the key under which this application stores its process ID in the registry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   447
     as a collection of path-components.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   448
     i.e. if #('foo' 'bar' 'baz') is returned here, the current applications ID will be stored
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   449
     in HKEY_CURRENT_USER\Software\foo\bar\baz\CurrentID.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   450
     (would also be used as a relative path for a temporary lock file under unix).
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   451
     Used to detect if another instance of this application is already running."
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   452
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   453
    self subclassResponsibility
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   454
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   455
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   456
applicationUUID
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   457
    "answer an application-specific unique uuid.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   458
     This is used as the name of some exclusive OS-resource, which is used to find out,
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   459
     if another instance of this application is already running.
13595
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   460
     Under win32, a mutex is used; under unix, an exclusive file in the tempDir could be used.
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   461
     If redefined, please return a real UUID (i.e. UUID fromString:'.....') and not a string or 
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   462
     similar possibly conflicting identifier.
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   463
     You can paste a fresh worldwide unique id via the editor's more-misc-paste UUID menuFunction."
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   464
    
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   465
    self subclassResponsibility
13595
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   466
c0db78969b83 comment/format in: #applicationUUID
Claus Gittinger <cg@exept.de>
parents: 13580
diff changeset
   467
    "Modified (comment): / 19-08-2011 / 01:54:39 / cg"
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   468
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   469
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   470
shouldReuseRunningApplication
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   471
    "answer true, if an already running application instance should be re-used"
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   472
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   473
    ^ false
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   474
! !
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   475
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   476
!StandaloneStartup class methodsFor:'multiple applications support-helpers'!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   477
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   478
applicationRegistryEntry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   479
    "retrieve the registry entry in which (if present), any currently running application
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   480
     has left its process ID"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   481
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   482
    |path relPathName applicationEntry softwareEntry|
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   483
14321
783b5c28f912 changed: #applicationRegistryEntry
Stefan Vogel <sv@exept.de>
parents: 14048
diff changeset
   484
    OperatingSystem isMSWINDOWSlike ifFalse:[^ nil].
783b5c28f912 changed: #applicationRegistryEntry
Stefan Vogel <sv@exept.de>
parents: 14048
diff changeset
   485
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   486
    path := self applicationRegistryPath.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   487
    relPathName := path asStringWith:$\.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   488
    applicationEntry := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\',relPathName.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   489
    applicationEntry isNil ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   490
        softwareEntry := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software'.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   491
        softwareEntry isNil ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   492
            Transcript showCR: 'Failed to get Software entry in registry'.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   493
            ^ nil.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   494
        ].
11103
aae220bd7157 changed: #applicationRegistryEntry
fm
parents: 11102
diff changeset
   495
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   496
        path do:[:subKey |
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   497
            |subEntry|
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   498
11103
aae220bd7157 changed: #applicationRegistryEntry
fm
parents: 11102
diff changeset
   499
            subEntry := softwareEntry createSubKeyNamed:subKey.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   500
            subEntry isNil ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   501
                Transcript showCR: 'Failed to create ',subKey,' entry in registry'.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   502
                ^ nil.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   503
            ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   504
            softwareEntry := subEntry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   505
        ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   506
        applicationEntry := softwareEntry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   507
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   508
    ^ applicationEntry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   509
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   510
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   511
checkForAndExitIfAnotherApplicationInstanceIsRunning
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   512
    "if another instance of this application is running,
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   513
     send it an openFile command for my file-argument, and exit.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   514
     (i.e. to let the already running application open up another window)."
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   515
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   516
    |shouldExit|
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   517
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   518
    self verboseInfo:('check for another app').
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   519
    self isAnotherApplicationInstanceRunning ifTrue:[
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   520
       self verboseInfo:('other app is running').
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   521
        shouldExit := self processStartupOfASecondInstance.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   522
        shouldExit ifTrue:[
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   523
            self verboseInfo:('yes; go away').
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   524
            self releaseApplicationMutex.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   525
            Smalltalk isStandAloneApp ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   526
                Smalltalk exit.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   527
            ]
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   528
        ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   529
    ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   530
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   531
    "Modified: / 04-02-2011 / 00:04:31 / cg"
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   532
!
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   533
11107
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   534
confirmOpenNewApplicationInstance
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   535
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   536
    ^ Dialog confirm: ('Continue opening a new instance of %1 or exit?' bindWith:self applicationName)
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   537
                title: ('%1 is already open!!' bindWith:self applicationName)
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   538
             yesLabel: 'Continue' 
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   539
              noLabel: 'Exit'
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   540
!
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   541
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   542
currentIDKeyInRegistry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   543
    ^ 'CurrentID'
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   544
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   545
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   546
getCurrentIDFromRegistry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   547
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   548
    |applicationEntry|
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   549
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   550
    applicationEntry := self applicationRegistryEntry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   551
    applicationEntry isNil ifTrue:[^ nil.].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   552
    ^ applicationEntry valueNamed: self currentIDKeyInRegistry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   553
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   554
    "
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   555
     |hWnd externalAddress|
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   556
     hWnd := DapasXStartup getCurrentIDFromRegistry.   
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   557
     hWnd isEmptyOrNil ifTrue:[^ self halt.].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   558
     hWnd := hWnd asInteger.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   559
     externalAddress := ExternalAddress newAddress: hWnd.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   560
     Display raiseWindow:externalAddress.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   561
     Display setForegroundWindow:externalAddress
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   562
    "
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   563
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   564
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   565
getIDOfRunningApplicationFromRegistryEntry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   566
    |applicationEntry|
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   567
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   568
    applicationEntry := self applicationRegistryEntry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   569
    applicationEntry isNil ifTrue:[^ nil.].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   570
    ^ applicationEntry valueNamed: self currentIDKeyInRegistry
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   571
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   572
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   573
isAnotherApplicationInstanceRunning
13083
66a8fb472eb5 comment/format in: #isAnotherApplicationInstanceRunning
Claus Gittinger <cg@exept.de>
parents: 12999
diff changeset
   574
    "answer true, if another instance of myself is currently running.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   575
     For now, it only works under win32, because it uses the underlying mutex mechanism."
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   576
    
11106
740c42559ef7 changed: #isAnotherApplicationInstanceRunning
fm
parents: 11105
diff changeset
   577
    | lastErrorCode alreadyExists handleAndLastErrorCode |
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   578
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   579
    OperatingSystem isMSDOSlike ifTrue:[
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   580
        self verboseInfo:('create mutex...').
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   581
        handleAndLastErrorCode := OperatingSystem createMutexNamed: (self applicationUUID printString).
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   582
        MutexHandle := handleAndLastErrorCode first.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   583
        lastErrorCode := handleAndLastErrorCode second.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   584
        "/ self assert: lastErrorCode == 0.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   585
        alreadyExists := 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   586
            MutexHandle isNil 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   587
            or:[lastErrorCode == 183 "ERROR_ALREADY_EXISTS"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   588
            or:[lastErrorCode == 5 "ERROR_ACCESS_DENIED"]].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   589
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   590
        self verboseInfo:('alreadyExists = ',alreadyExists printString).
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   591
        alreadyExists ifFalse:[OperatingSystem waitForSingleObject: MutexHandle].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   592
        ^ alreadyExists
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   593
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   594
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   595
    ^ false.
13083
66a8fb472eb5 comment/format in: #isAnotherApplicationInstanceRunning
Claus Gittinger <cg@exept.de>
parents: 12999
diff changeset
   596
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
   597
    "Modified: / 04-02-2011 / 00:05:51 / cg"
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   598
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   599
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   600
processStartupOfASecondInstance
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   601
    "This is executed when I have been started as a second instance of an already running application.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   602
     If I can get the currentID (i.e. windowID) of the first one and there is a command line argument with a file, 
12935
49210cf2d978 comment/format in: #processStartupOfASecondInstance
Claus Gittinger <cg@exept.de>
parents: 12933
diff changeset
   603
     send a message to the main window of the already running application, to ask it for another window.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   604
     If the currentID is unknown, ask if the user wants to open a new instance of the application anyway.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   605
     Return true if the first instance has been notified, and this second instance should exit."
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   606
11107
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   607
    |currentIDStringFromRegistry currentIDFromRegistry fileArg commands aWindowId setForegroundWindowSucceeded|
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   608
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   609
    commands := CommandLineArguments.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   610
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   611
    currentIDStringFromRegistry := self getCurrentIDFromRegistry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   612
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   613
    "If the currentID is not found and there are arguments from the command line, 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   614
     we should wait in case of starting the first instance of the application 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   615
     with a multiple selection of files."
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   616
    (currentIDStringFromRegistry isEmptyOrNil and:[commands notEmptyOrNil]) ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   617
        Delay waitForSeconds: 2.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   618
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   619
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   620
    currentIDStringFromRegistry := self getCurrentIDFromRegistry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   621
    currentIDStringFromRegistry isEmptyOrNil ifTrue:[
11107
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   622
        ^ self confirmOpenNewApplicationInstance not.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   623
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   624
11107
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   625
    currentIDFromRegistry := Integer readFrom:currentIDStringFromRegistry onError: 0.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   626
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   627
    "/ bring the other application to the foreground
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   628
    aWindowId := ExternalAddress newAddress: currentIDFromRegistry.
11107
2c1b779bc57a *** empty log message ***
fm
parents: 11106
diff changeset
   629
    setForegroundWindowSucceeded := Display primSetForegroundWindow: aWindowId.
11379
2cd74df95a0e changed: #processStartupOfASecondInstance
fm
parents: 11363
diff changeset
   630
"/    setForegroundWindowSucceeded ifFalse:[^ self confirmOpenNewApplicationInstance not].
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   631
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   632
    "Autostart for associated extension"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   633
    commands notEmpty ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   634
        fileArg := commands last asFilename.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   635
        fileArg exists ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   636
            self sendOpenPathCommand:(fileArg pathName) toWindowId: aWindowId.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   637
        ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   638
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   639
    ^ true
12935
49210cf2d978 comment/format in: #processStartupOfASecondInstance
Claus Gittinger <cg@exept.de>
parents: 12933
diff changeset
   640
49210cf2d978 comment/format in: #processStartupOfASecondInstance
Claus Gittinger <cg@exept.de>
parents: 12933
diff changeset
   641
    "Modified: / 08-07-2010 / 00:47:44 / cg"
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   642
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   643
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   644
releaseApplicationMutex
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   645
12933
4e196c41604d changed: #releaseApplicationMutex set MutexHandle to nil
ca
parents: 12626
diff changeset
   646
    (MutexHandle notNil and:[OperatingSystem isMSDOSlike]) ifTrue:[
4e196c41604d changed: #releaseApplicationMutex set MutexHandle to nil
ca
parents: 12626
diff changeset
   647
        OperatingSystem releaseMutex: MutexHandle.
4e196c41604d changed: #releaseApplicationMutex set MutexHandle to nil
ca
parents: 12626
diff changeset
   648
        OperatingSystem primCloseHandle: MutexHandle.
4e196c41604d changed: #releaseApplicationMutex set MutexHandle to nil
ca
parents: 12626
diff changeset
   649
4e196c41604d changed: #releaseApplicationMutex set MutexHandle to nil
ca
parents: 12626
diff changeset
   650
        MutexHandle := nil.
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   651
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   652
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   653
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   654
sendCommand:message toWindowId:aWindowId
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   655
    "use the event send mechanism to forward a command to the already running application"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   656
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   657
    Display 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   658
        sendCopyDataString: message 
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   659
        toWindowId: aWindowId.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   660
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   661
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   662
sendOpenPathCommand:pathName toWindowId:aWindowId
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   663
    "use the event send mechanism to forward an open-Path command to the already running application"
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   664
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   665
    self sendCommand:('openPath:', pathName) toWindowId:aWindowId.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   666
!
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   667
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   668
writeCurrentIDIntoRegistry: currentID
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   669
11104
d1a963670d67 changed: #writeCurrentIDIntoRegistry:
fm
parents: 11103
diff changeset
   670
    |applicationEntry currentIDEntry|
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   671
11104
d1a963670d67 changed: #writeCurrentIDIntoRegistry:
fm
parents: 11103
diff changeset
   672
    applicationEntry := self applicationRegistryEntry.
d1a963670d67 changed: #writeCurrentIDIntoRegistry:
fm
parents: 11103
diff changeset
   673
    applicationEntry isNil ifTrue:[^ false.].
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   674
11104
d1a963670d67 changed: #writeCurrentIDIntoRegistry:
fm
parents: 11103
diff changeset
   675
    currentIDEntry := applicationEntry createSubKeyNamed:(self currentIDKeyInRegistry).
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   676
    currentIDEntry isNil ifTrue:[
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   677
        Transcript showCR: 'Failed to create CurrentID entry in registry'.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   678
        ^ false.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   679
    ].
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   680
11104
d1a963670d67 changed: #writeCurrentIDIntoRegistry:
fm
parents: 11103
diff changeset
   681
    ^ applicationEntry valueNamed:(self currentIDKeyInRegistry) put:(currentID printString).
11102
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   682
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   683
    "
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   684
     | currentID returnedCurrentID |
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   685
     currentID := 999.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   686
     DapasXStartup writeCurrentIDIntoRegistry: currentID.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   687
     returnedCurrentID := DapasXStartup getCurrentIDFromRegistry.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   688
     self assert: currentID = returnedCurrentID asNumber.
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   689
    "
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   690
! !
fece26c79af5 refactored
Claus Gittinger <cg@exept.de>
parents: 11056
diff changeset
   691
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
!StandaloneStartup class methodsFor:'queries'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
applicationName
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   695
    "used in verbose messages - can/should be redefined in subclasses"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
    |nm|
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
    nm := self nameWithoutPrefix.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
    (nm endsWith:'Startup') ifTrue:[
15162
f17158d75a0e Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 14977
diff changeset
   701
        ^ nm copyButLast:('Startup' size).
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
    (nm endsWith:'Start') ifTrue:[
15162
f17158d75a0e Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 14977
diff changeset
   704
        ^ nm copyButLast:('Start' size).
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
    ^ nm
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
    "Created: / 19-09-2006 / 16:26:44 / cg"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
14544
c11b4519b460 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 14321
diff changeset
   711
commandLineArguments
c11b4519b460 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 14321
diff changeset
   712
    ^ CommandLineArguments
c11b4519b460 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 14321
diff changeset
   713
!
c11b4519b460 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 14321
diff changeset
   714
19518
78207b7c73fc #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 19517
diff changeset
   715
isAbstract
78207b7c73fc #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 19517
diff changeset
   716
    ^ self == StandaloneStartup
78207b7c73fc #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 19517
diff changeset
   717
!
78207b7c73fc #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 19517
diff changeset
   718
10040
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   719
isBrowserStartable
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   720
    "do not allow clicking on me in the browser"
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   721
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   722
    ^ false
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   723
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   724
    "Created: / 06-10-2006 / 11:33:13 / cg"
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   725
!
59d0c20b139f protocol for startability via browser slightly changed
Claus Gittinger <cg@exept.de>
parents: 9944
diff changeset
   726
12626
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   727
keepSplashWindowOpen
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   728
    "if true is returned here, the splashWindow is not closed and will be still open
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   729
     when the main: method is invoked. This allows for plugin-loads etc. to be shown in the
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   730
     splash screen. However, my subclass's main: has to make sure that the splashScreen is closed.
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   731
     (calling hideSplashWindow)
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   732
     The default is false here which means that the splashWindow will be already closed when the
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   733
     subclasses main: is invoked."
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   734
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   735
    ^ false
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   736
!
f85aaddaea1d added: keepSplashWindowOpen
Claus Gittinger <cg@exept.de>
parents: 12523
diff changeset
   737
15818
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   738
patchesDirectory
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   739
    "answer a directory containing patches.
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   740
     The directory needs not to be present."
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   741
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   742
    ^ OperatingSystem pathOfSTXExecutable asFilename directory construct:'patches'.
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   743
!
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   744
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
startupFilename
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   746
    "used in verbose messages - can/should be redefined in subclasses"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
    ^ self applicationName asLowercase,'Start.rc'
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
    "
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   751
     ExpeccoStartup startupFilename -> 'expecco.rc'
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
    "
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
    "Created: / 19-09-2006 / 16:38:28 / cg"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
!StandaloneStartup class methodsFor:'startup'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   759
handleRCFileOptionsFromArguments:argv
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   760
    "handle rc-file command line arguments:
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   761
        --rcFileName ......... define a startup rc-file
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   762
    "
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   763
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   764
    |idx nextArg rcFilename|
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   765
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   766
    idx := argv indexOf:'--rcFileName'.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   767
    idx ~~ 0 ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   768
        nextArg := argv at:(idx + 1) ifAbsent:nil.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   769
        (nextArg notNil and:[ (nextArg startsWith:'-') not ]) ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   770
            rcFilename := nextArg.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   771
            argv removeAtIndex:idx+1; removeAtIndex:idx.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   772
        ]
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   773
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   774
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   775
    rcFilename isNil ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   776
        rcFilename := self startupFilename.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   777
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   778
    rcFilename asFilename exists ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   779
        self verboseInfo:('reading ',rcFilename,'...').
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   780
        rcFilename isAbsolute ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   781
            rcFilename := OperatingSystem pathOfSTXExecutable asFilename directory constructString:rcFilename.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   782
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   783
        Smalltalk secureFileIn:rcFilename
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   784
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   785
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   786
    "Created: / 24-05-2011 / 16:13:34 / cg"
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   787
!
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   788
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   789
handleScriptingOptionsFromArguments:argv
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   790
    "handle scripting command line argument:
19879
eb2ba55b73bb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19590
diff changeset
   791
        --scripting portNr ... start a scripting server on port (or default, if missing)
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   792
        --allowHost host ..... add host to the allowed scripting hosts
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   793
    "
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   794
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   795
    |scripting idx nextArg portNr allowedScriptingHosts|
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   796
19881
8ba1bb8e7506 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 19880
diff changeset
   797
    self verboseInfo:('handle scripting: ',argv asArray printString).
8ba1bb8e7506 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 19880
diff changeset
   798
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   799
    scripting := false.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   800
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   801
    idx := argv indexOfAny:#('--scripting').
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   802
    idx ~~ 0 ifTrue:[
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   803
        nextArg := argv at:(idx + 1) ifAbsent:nil.
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   804
        (nextArg notNil and:[ (nextArg startsWith:'-') not ]) ifTrue:[
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   805
            portNr := nextArg asInteger.
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   806
            argv removeAtIndex:idx+1.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   807
        ].
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   808
        argv removeAtIndex:idx.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   809
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   810
        scripting := true
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   811
    ].
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   812
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   813
    allowedScriptingHosts := OrderedCollection new.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   814
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   815
    idx := argv indexOfAny:#('--allowHost').
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   816
    [idx ~~ 0] whileTrue:[
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   817
        nextArg := argv at:(idx + 1) ifAbsent:nil.
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   818
        nextArg isNil ifTrue:[
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   819
            self usage.
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   820
            AbortOperationRequest raise.
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   821
        ].
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   822
        allowedScriptingHosts add:nextArg.
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   823
        idx := argv indexOfAny:#('--allowHost').
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   824
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   825
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   826
    scripting ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   827
        self verboseInfo:('scripting on').
16131
3caa8b31823f class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15899
diff changeset
   828
        STXScriptingServer isNil ifTrue:[
16237
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   829
            [
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   830
                Smalltalk loadPackage:'stx:goodies/simpleServices'.
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   831
            ] on:PackageLoadError do:[:ex|
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   832
                self verboseInfo:('missing STXScriptingServer package (stx:goodies/simpleServices)').
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   833
                ^ self.
4df960fd7c26 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16236
diff changeset
   834
            ]
16131
3caa8b31823f class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15899
diff changeset
   835
        ].
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   836
        STXScriptingServer notNil ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   837
            allowedScriptingHosts do:[:eachHost | STXScriptingServer allowHost:eachHost ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   838
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   839
            "/ scripting on port/stdin_out/8008
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   840
            self verboseInfo:('start scripting').
19881
8ba1bb8e7506 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 19880
diff changeset
   841
            STXScriptingServer server:(STXScriptingServer startAt:portNr)
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   842
        ] ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   843
            self verboseInfo:('missing STXScriptingServer class').
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   844
        ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   845
    ].
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   846
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   847
    "Created: / 24-05-2011 / 16:12:02 / cg"
13376
4d32b325003f changed:
Claus Gittinger <cg@exept.de>
parents: 13375
diff changeset
   848
    "Modified: / 24-05-2011 / 17:40:26 / cg"
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   849
!
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
   850
11055
e600e19e2e7f loadPatch extracted to be redefinable.
Claus Gittinger <cg@exept.de>
parents: 10956
diff changeset
   851
loadPatch:fileName
11056
e2c4a6e948b6 loadPatch extracted to be redefinable.
Claus Gittinger <cg@exept.de>
parents: 11055
diff changeset
   852
    self verboseInfo:('loading patch: ',fileName baseName).
15899
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   853
    [
16307
2a1eda5a904b class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16237
diff changeset
   854
        Smalltalk silentFileIn:fileName.
15899
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   855
    ] on:InvalidPatchError do:[:ex|
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   856
        self verboseInfo:('invalid patch: %1 error: %2'
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   857
                                 bindWith:fileName baseName with:ex messageText).
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   858
        ^ false.
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   859
    ].
4dcd8c4200b0 class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15895
diff changeset
   860
    ^ true
11055
e600e19e2e7f loadPatch extracted to be redefinable.
Claus Gittinger <cg@exept.de>
parents: 10956
diff changeset
   861
!
e600e19e2e7f loadPatch extracted to be redefinable.
Claus Gittinger <cg@exept.de>
parents: 10956
diff changeset
   862
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   863
loadPatches
13796
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   864
    "load all patches in the application's patches dir"
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   865
15504
52b934e3c98c class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15503
diff changeset
   866
    self possiblyCheckForNewPatchesOnServer.
13796
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   867
    self loadPatchesMatching:nil.
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   868
!
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   869
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   870
loadPatchesMatching:aGlobString
15502
60b630074a16 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15162
diff changeset
   871
    "load the patches in the application's patches dir.
13796
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   872
     If aGlobString ist not empty or nil, only patches matching the glob
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   873
     pattern are loaded. E.g. '[0-9]*.chg'"
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   874
15894
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   875
    |patchesDir prevMode patchesToLoad|
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   876
18525
6b76f94a31ae allow for patchesDirectory to return a string
Claus Gittinger <cg@exept.de>
parents: 18180
diff changeset
   877
    patchesDir := self patchesDirectory asFilename.
15818
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   878
    patchesDir isDirectory ifTrue:[
11764
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   879
        prevMode := ClassCategoryReader sourceMode.
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   880
        ClassCategoryReader sourceMode:#discard.
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   881
        [
15894
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   882
            patchesToLoad := patchesDir directoryContentsAsFilenames.
15818
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   883
            patchesToLoad := patchesToLoad select:[:eachFilenameString|
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   884
                    eachFilenameString asFilename isRegularFile 
cc392ec9285c class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 15739
diff changeset
   885
                ].
13796
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   886
            aGlobString notEmptyOrNil ifTrue:[
15894
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   887
                patchesToLoad := patchesToLoad select:[:eachFilename|
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   888
                        aGlobString match:eachFilename baseName caseSensitive:false
13796
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   889
                    ].
b163498d6e17 added: #loadPatchesMatching:
Stefan Vogel <sv@exept.de>
parents: 13595
diff changeset
   890
            ].
15894
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   891
            (patchesToLoad sort:[:a :b | a baseName < b baseName]) do:[:patchFile |
335888decf07 class: StandaloneStartup
sr
parents: 15830
diff changeset
   892
                self loadPatch:patchFile.
11764
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   893
            ].
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   894
        ] ensure:[
89c0c60feb24 Discard source code of patches that are loaded at startup
Stefan Vogel <sv@exept.de>
parents: 11753
diff changeset
   895
            ClassCategoryReader sourceMode:prevMode.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   896
        ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   897
    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   898
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   899
    "Modified: / 19-09-2006 / 16:30:58 / cg"
15827
e97e83b43873 class: StandaloneStartup
sr
parents: 15818
diff changeset
   900
    "Modified: / 25-11-2013 / 12:27:33 / sr"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   901
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   902
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   903
loadRemainingClassLibraries
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   904
    "To speedup startup, we did not load all dll's (only a subset of non-GUI dll's is present).
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   905
     Now, load all skipped libs (the ones marked with '*') from modules.stx."
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   906
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   907
    |modulesFile dllDirectory dlls|
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   908
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   909
    OperatingSystem isMSWINDOWSlike ifFalse:[^ self ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   910
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   911
    self verboseInfo:'loadRemainingClassLibraries'.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   912
    modulesFile  := self stxModulesFilename.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   913
    dllDirectory := modulesFile directory.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   914
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   915
    dlls := OrderedCollection new.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   916
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   917
    modulesFile readingLinesDo:[:eachModulesLine|
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   918
        |basename dllFile|
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   919
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   920
        basename := eachModulesLine withoutSeparators.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   921
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   922
        (basename notEmpty and:[basename first == $*]) ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   923
            basename := (basename copyFrom:2) withoutSeparators, '.dll'.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   924
            dllFile := dllDirectory construct:basename.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   925
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   926
            dllFile exists ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   927
"/                self verboseInfo:('loading: ', basename).
13580
e5383cbbf032 changed: #loadRemainingClassLibraries
Claus Gittinger <cg@exept.de>
parents: 13378
diff changeset
   928
"/                Smalltalk showSplashMessage:('loading ', basename).
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   929
                dlls add:dllFile.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   930
            ] ifFalse:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   931
                self verboseInfo:( '**** cannot resolve: ', basename).
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   932
            ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   933
        ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   934
    ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   935
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   936
    dlls notEmpty ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   937
        ObjectFileLoader loadObjectFiles:dlls.
13322
8a1d5d6205cc changed: #loadRemainingClassLibraries
Stefan Vogel <sv@exept.de>
parents: 13280
diff changeset
   938
        ProjectDefinition initializeAllProjectDefinitions.
8a1d5d6205cc changed: #loadRemainingClassLibraries
Stefan Vogel <sv@exept.de>
parents: 13280
diff changeset
   939
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   940
        Display notNil ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   941
            "New view classes may have been loaded - have to update their styles"
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   942
            self verboseInfo:'update style caches of loaded dlls'.
12999
a5ab22c6470c changed: #loadRemainingClassLibraries
Stefan Vogel <sv@exept.de>
parents: 12998
diff changeset
   943
            SimpleView readStyleSheetAndUpdateAllStyleCaches.
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   944
        ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   945
    ].
13580
e5383cbbf032 changed: #loadRemainingClassLibraries
Claus Gittinger <cg@exept.de>
parents: 13378
diff changeset
   946
e5383cbbf032 changed: #loadRemainingClassLibraries
Claus Gittinger <cg@exept.de>
parents: 13378
diff changeset
   947
    "Modified: / 11-08-2011 / 17:23:55 / cg"
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   948
!
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
   949
15503
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   950
possiblyCheckForNewPatchesOnServer
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   951
    "to be redefined in concrete applications: check fo patches on a server"
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   952
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   953
    "/ intentionally left blank
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   954
!
bc9477abd6a0 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15502
diff changeset
   955
15830
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   956
removeDebugger
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   957
    Smalltalk at:#Debugger put:nil.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   958
!
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   959
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   960
removeInspector
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   961
    Smalltalk at:#Inspector put:nil.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   962
!
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   963
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   964
removeLauncher
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   965
    NewLauncher notNil ifTrue:[
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   966
        NewLauncher allPrivateClasses do:[:cls |
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   967
            Smalltalk at:(cls name) put:nil.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   968
        ].
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   969
        Smalltalk at:#NewLauncher put:nil.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   970
    ].
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   971
!
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
   972
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   973
setupSmalltalkFromArguments:argv
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   974
    "handle common command line arguments:
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   975
        --help ............... print usage and exit
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   976
        --verbose (-V) ....... be verbose during startup
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   977
        --debug .............. enable debugger & inspector
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   978
        --rcFileName ......... define a startup rc-file
11435
4b7e47a525df --allowHost option
Claus Gittinger <cg@exept.de>
parents: 11423
diff changeset
   979
        --scripting portNr ... start a scripting server
4b7e47a525df --allowHost option
Claus Gittinger <cg@exept.de>
parents: 11423
diff changeset
   980
        --allowHost host ..... add host to the allowed scripting hosts
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   981
    "
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
   982
16235
9cc3d059960d class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 16233
diff changeset
   983
    |idx debugging baseDir|
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   984
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   985
"/    Smalltalk beHeadless:true.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   986
"/    OperatingSystem disableSignal:(OperatingSystem sigHUP).
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   987
"/    Smalltalk infoPrinting:true.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   988
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   989
    (argv includes:'--help') ifTrue:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   990
        self usage.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   991
        AbortOperationRequest raise.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   992
    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   993
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   994
    idx := argv indexOfAny:#('--verbose' '-V').
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   995
    idx ~~ 0 ifTrue:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   996
        argv removeAtIndex:idx.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   997
        Verbose := true.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   998
    ].
10773
98a51414b27f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10772
diff changeset
   999
    self verboseInfo:('args: ',argv asArray printString).
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1000
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1001
    debugging := false.
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1002
    (self allowDebugOption) ifTrue:[
13126
8cbc00290e5b changed: #setupSmalltalkFromArguments:
Claus Gittinger <cg@exept.de>
parents: 13089
diff changeset
  1003
        idx := argv indexOf:'--debug'.
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1004
        idx ~~ 0 ifTrue:[
11357
0a710cf52bb4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11356
diff changeset
  1005
            self verboseInfo:('debug on').
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1006
            argv removeAtIndex:idx.
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1007
            debugging := true
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1008
        ].
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1009
    ].
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1010
    debugging ifTrue:[
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1011
        self setupToolsForDebug.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1012
    ] ifFalse:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1013
        self setupToolsForNoDebug.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1014
    ].
16236
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1015
    baseDir := OperatingSystem pathOfSTXExecutable asFilename directory.
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1016
    baseDir baseName = 'application' ifTrue:[
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1017
        ".../work/exept/expecco/application/expecco -> .../work/"
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1018
        baseDir := baseDir directory directory directory.
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1019
        Smalltalk packagePath 
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1020
                    add:(baseDir pathName).
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1021
    ] ifFalse:[
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1022
        "/opt/expecco/bin/expecco -> /opt/expecco/"
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1023
        baseDir := baseDir directory.
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1024
        Smalltalk packagePath 
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1025
                    add:(baseDir constructString:'packages').
7a8308397650 Set packagePath
Stefan Vogel <sv@exept.de>
parents: 16235
diff changeset
  1026
    ].
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1027
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1028
    (self suppressRCFileReading) ifFalse:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1029
        self handleRCFileOptionsFromArguments:argv.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1030
    ].
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1031
    (self allowScriptingOption) ifTrue:[
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1032
        self handleScriptingOptionsFromArguments:argv.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1033
    ].
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1034
    (self allowCoverageMeasurementOption) ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1035
        self handleCoverageMeasurementOptionsFromArguments:argv.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1036
    ].
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1037
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1038
    ^ true
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1039
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1040
    "Modified: / 24-05-2011 / 16:14:45 / cg"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1041
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1042
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1043
setupToolsForDebug
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1044
    Debugger := DebugView ? MiniDebugger.
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1045
    Inspector := InspectorView ? MiniInspector.
11736
095ef06bd971 show debug enabled/disabled info when Verbose is true
fm
parents: 11714
diff changeset
  1046
    Verbose ifTrue:[ 'debug enabled - CTRL-C brings you into a debugger.' errorPrintCR ].
095ef06bd971 show debug enabled/disabled info when Verbose is true
fm
parents: 11714
diff changeset
  1047
"/    self verboseInfo:('debug enabled - CTRL-C brings you into a debugger.').
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1048
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1049
    "Created: / 19-09-2006 / 16:40:32 / cg"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1050
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1051
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1052
setupToolsForNoDebug
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1053
    Smalltalk isStandAloneApp ifTrue:[
15830
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
  1054
        self removeDebugger.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
  1055
        self removeInspector.
aa41c94cfc82 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 15827
diff changeset
  1056
11736
095ef06bd971 show debug enabled/disabled info when Verbose is true
fm
parents: 11714
diff changeset
  1057
        Verbose ifTrue:[ 'debug disabled.' errorPrintCR ].
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1058
        self redirectStandardStreams.
10773
98a51414b27f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10772
diff changeset
  1059
    ].
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1060
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1061
    "Created: / 19-09-2006 / 16:40:47 / cg"
10773
98a51414b27f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10772
diff changeset
  1062
    "Modified: / 31-10-2007 / 16:18:40 / cg"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1063
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1064
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1065
start
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1066
    GenericException handle:[:ex |
19590
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1067
        self verboseInfo:'Error during startup:'.
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1068
        self verboseInfo:ex description.
12996
8662430ec3de changed: #start
Stefan Vogel <sv@exept.de>
parents: 12992
diff changeset
  1069
        Verbose == true ifTrue:[ex suspendedContext fullPrintAllLevels:10].
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1070
        ex reject.        
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1071
    ] do:[
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1072
        |idx|
13127
60b2005943bb changed: #start
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
  1073
19590
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1074
        Smalltalk showSplashMessage:'start'.
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1075
        self verboseInfo:'starting...'.
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1076
        CommandLineArguments := (self additionalArgumentsFromRegistry) 
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1077
                                , Smalltalk commandLineArguments.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1078
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1079
        self verboseInfo:('args: ', CommandLineArguments asStringCollection asString).
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1080
13089
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1081
        "--newAppInstance - do not reuse an existing application instance,
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1082
         but run in a separate process"
13089
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1083
        idx := CommandLineArguments indexOfAny:#('--newAppInstance').
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1084
        idx == 0 ifTrue:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1085
            self shouldReuseRunningApplication ifTrue:[
19590
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1086
                self verboseInfo:'should reuse app'.
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1087
                "Multiple Application support:
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1088
                 if another expecco is running, ask it to open another window for me.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1089
                 If that is the case, the following function will not return, but instead exit."
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1090
                self checkForAndExitIfAnotherApplicationInstanceIsRunning.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1091
            ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1092
        ] ifFalse:[
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1093
            CommandLineArguments removeAtIndex:idx.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1094
        ].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1095
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1096
        "/ Arrive here, if no other application is running.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1097
        "/ to speedup startup, we did not load all dll's (only a subset of non-GUI dll's is present).
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1098
        "/ now, load all skipped libs from modules.stx.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1099
        self loadRemainingClassLibraries.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1100
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1101
        Smalltalk isStandAloneApp ifTrue:[
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1102
            self loadPatches.
19590
445c1c162669 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 19518
diff changeset
  1103
            self verboseInfo:'setup Smalltalk'.
12992
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1104
        ].
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1105
        self setupSmalltalkFromArguments:CommandLineArguments.
cad1bd395046 changed: #start
Claus Gittinger <cg@exept.de>
parents: 12991
diff changeset
  1106
        self main
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1107
    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1108
13280
d5bbbf1caefa changed:
Claus Gittinger <cg@exept.de>
parents: 13269
diff changeset
  1109
    "Modified: / 04-02-2011 / 00:03:47 / cg"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1110
!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1111
11807
f9e3c45c53c8 Moved #startStartBlockProcess from ExpeccoStandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 11806
diff changeset
  1112
startStartBlockProcess
f9e3c45c53c8 Moved #startStartBlockProcess from ExpeccoStandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 11806
diff changeset
  1113
    Smalltalk startStartBlockProcess
f9e3c45c53c8 Moved #startStartBlockProcess from ExpeccoStandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 11806
diff changeset
  1114
!
f9e3c45c53c8 Moved #startStartBlockProcess from ExpeccoStandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 11806
diff changeset
  1115
12998
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1116
stxModulesFilename
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1117
    "answer the Filename of modules.stx"
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1118
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1119
    |file|
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1120
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1121
    file := 'modules.stx' asFilename.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1122
    file exists ifTrue:[^ file].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1123
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1124
    file := OperatingSystem pathOfSTXExecutable asFilename directory construct:'modules.stx'.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1125
    file exists ifTrue:[^ file].
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1126
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1127
    self error:'cannot find: modules.stx'.
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1128
!
c967aa65e09a Move multiple app support and delayed DLL stuff to StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 12996
diff changeset
  1129
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1130
usage
13089
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1131
    Stderr nextPutLine:'usage: ',self applicationName,' [options...]'.
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1132
    Stderr nextPutLine:'  --help .................. output this message'.
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1133
    Stderr nextPutLine:'  --verbose ............... verbose startup'.
17707
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1134
    self isHeadless ifFalse:[
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1135
        Stderr nextPutLine:'  --noBanner .............. no splash screen'.
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1136
    ].
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1137
    OperatingSystem isMSWINDOWSlike ifTrue:[
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1138
        Stderr nextPutLine:'  --newAppInstance ........ start as its own application process (do not reuse a running instance)'.
62968cb231d8 class: StandaloneStartup
Claus Gittinger <cg@exept.de>
parents: 17280
diff changeset
  1139
    ].
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1140
    self allowScriptingOption ifTrue:[
19880
997db2dc51c6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19879
diff changeset
  1141
        Stderr nextPutLine:'  --scripting <portNr> .... enable scripting via port (or stdin/stdOut, if 0. Default is 8008)'.
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1142
    ].
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1143
    self allowDebugOption ifTrue:[
13089
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1144
        Stderr nextPutLine:'  --debug ................. enable Debugger'.
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1145
    ].
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1146
    self allowCoverageMeasurementOption ifTrue:[
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1147
        Stderr nextPutLine:'  --coverage .............. turn on coverage measurement'.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1148
        Stderr nextPutLine:'     [+/-]package: pattern ...  - include/exclude packages'.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1149
        Stderr nextPutLine:'     [+/-]class: pattern ...    - include/exclude classes'.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1150
        Stderr nextPutLine:'     [+/-]method: cls#sel ...   - include/exclude methods'.
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1151
    ].
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1152
    self suppressRCFileReading ifFalse:[
13089
f31a89295700 changed:
Claus Gittinger <cg@exept.de>
parents: 13084
diff changeset
  1153
        Stderr nextPutLine:'  --rcFileName file ....... execute code from file on startup (default: ',self startupFilename,')'.
11352
023a07ae955c --scripting option
Claus Gittinger <cg@exept.de>
parents: 11107
diff changeset
  1154
    ].
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1155
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1156
    "Created: / 19-09-2006 / 16:37:55 / cg"
13375
921f77dd800d coverage support
Claus Gittinger <cg@exept.de>
parents: 13354
diff changeset
  1157
    "Modified: / 24-05-2011 / 17:23:18 / cg"
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1158
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1159
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1160
!StandaloneStartup class methodsFor:'startup-to be redefined'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1161
12991
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1162
additionalArgumentsFromRegistry
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1163
    "can be redefined to fetch and return additional arguments from the registry 
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1164
     (or other .ini file). These are added to the beginning of the command line arguments."
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1165
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1166
    ^ #()
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1167
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1168
    "Created: / 04-08-2010 / 12:20:27 / cg"
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1169
!
f9c0f556ea86 added: #additionalArgumentsFromRegistry
Claus Gittinger <cg@exept.de>
parents: 12988
diff changeset
  1170
11806
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1171
isHeadless
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1172
    "this is invoked early by Smalltalk>>mainStartup, to ask if I like to
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1173
     have a Display or if I am a non-GUI headless application.
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1174
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1175
     Redefine in subclass, if your application is a non-GUI application"
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1176
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1177
    ^ false
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1178
!
6508528f9499 Define #isHeadless with default value (false)
Stefan Vogel <sv@exept.de>
parents: 11764
diff changeset
  1179
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1180
main
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1181
    self verboseInfo:('entering main').
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1182
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1183
    self main:CommandLineArguments.
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1184
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1185
    "
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1186
     self main
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1187
     self main:#('--info') 
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1188
    "
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1189
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1190
    "Modified: / 31-10-2007 / 16:03:22 / cg"
10636
ba91c2d292f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10040
diff changeset
  1191
!
ba91c2d292f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10040
diff changeset
  1192
11355
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1193
main:argv
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1194
    self subclassResponsibility.
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1195
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1196
"/ a typical main: looks like (in a subclass):
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1197
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1198
"/    |app fileArg|
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1199
"/
2aa83c61ebd4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11354
diff changeset
  1200
"/    self verboseInfo:('starting application').
14977
c67d55de705e class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 14544
diff changeset
  1201
"/
c67d55de705e class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 14544
diff changeset
  1202
"/    self startStartBlockProcess.
c67d55de705e class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 14544
diff changeset
  1203
"/    Smalltalk openDisplay.
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1204
"/    app := <someGUIApplicationModelClass> open.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1205
"/
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1206
"/    self verboseInfo:('looking for args in ',argv).
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1207
"/    argv notEmptyOrNil ifTrue:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1208
"/        fileArg := argv last asFilename.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1209
"/        self verboseInfo:('fileArg is ',fileArg name).
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1210
"/        fileArg exists ifTrue:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1211
"/            self verboseInfo:('file exists').
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1212
"/
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1213
"/            ( #('foo' 'bar' 'baz' ) includes:fileArg suffix) ifTrue:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1214
"/                self verboseInfo:('loading').
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1215
"/
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1216
"/                Error handle:[:ex |
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1217
"/                    self verboseInfo:'error while loading'.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1218
"/                    ex suspendedContext fullPrintAll.
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1219
"/                ] do:[
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1220
"/                    app menuLoadFromFile:fileArg
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1221
"/                ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1222
"/            ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1223
"/        ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1224
"/    ].
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1225
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1226
    "Created: / 19-09-2006 / 16:48:29 / cg"
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1227
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1228
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1229
!StandaloneStartup class methodsFor:'documentation'!
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1230
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1231
version
18525
6b76f94a31ae allow for patchesDirectory to return a string
Claus Gittinger <cg@exept.de>
parents: 18180
diff changeset
  1232
    ^ '$Header$'
12335
af9a7bc14d6a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 11807
diff changeset
  1233
!
af9a7bc14d6a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 11807
diff changeset
  1234
af9a7bc14d6a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 11807
diff changeset
  1235
version_CVS
18525
6b76f94a31ae allow for patchesDirectory to return a string
Claus Gittinger <cg@exept.de>
parents: 18180
diff changeset
  1236
    ^ '$Header$'
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1237
! !
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1238
14977
c67d55de705e class: StandaloneStartup
Stefan Vogel <sv@exept.de>
parents: 14544
diff changeset
  1239
9944
aa3d787443ef initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1240
StandaloneStartup initialize!