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