Reading the header of a MP3 file.
authormartin
Tue, 07 Nov 2000 15:19:03 +0100
changeset 1417 810fdd94d742
parent 1416 79f3aee2d64c
child 1418 d2fb63f4a457
Reading the header of a MP3 file.
ApplicationModel.st
--- a/ApplicationModel.st	Mon Oct 02 16:47:03 2000 +0200
+++ b/ApplicationModel.st	Tue Nov 07 15:19:03 2000 +0100
@@ -1,2411 +1,196 @@
-"
- COPYRIGHT (c) 1995 by Claus Gittinger
-	      All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice.   This software may not
- be provided or otherwise made available to, or used by, any
- other person.  No title to or ownership of the software is
- hereby transferred.
-"
-
-"{ Package: 'stx:libview2' }"
-
-Model subclass:#ApplicationModel
-	instanceVariableNames:'builder resources device masterApplication'
-	classVariableNames:'DefaultLabels DefaultVisuals'
-	poolDictionaries:''
-	category:'Interface-Framework'
-!
-
-ApplicationModel class instanceVariableNames:'ClassResources'
-
-"
- No other class instance variables are inherited by this class.
-"
-!
-
-!ApplicationModel class methodsFor:'documentation'!
-
-copyright
-"
- COPYRIGHT (c) 1995 by Claus Gittinger
-	      All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice.   This software may not
- be provided or otherwise made available to, or used by, any
- other person.  No title to or ownership of the software is
- hereby transferred.
-"
-!
-
-documentation
-"
-    Since many ST-80 classes are subclasses of ApplicationModel, this class
-    is provided here to allow easier porting of ST-80 code.
-
-    It does not (currently) provide all functionality and is NOT
-    compatible to the corresponding ST80 class; therefore, manual
-    changes have to be made to get those applications to run under ST/X.
-    (but at least, this enables you to fileIn that code and have a superclass
-     for them)
-
-    As time goes by, ST/X applications are going to be converted to
-    become subclasses of this abstract class - see Launcher for a
-    first concrete example.
-
-
-    ApplicationModel is prepared to build a view from a windowSpec, as
-    created by the windowBuilder. If your subclass does not provide such
-    a spec, you should at least redefine:
-
-        #openInterface   - to create a topview and open it
-
-    you may want to redefine:
-
-        #closeRequest    - to catch window closing
-        #focusSequence   - to define a sequence for focus-stepping
-
-
-    Once the interfaceBuilder is finished & released, subclasses can
-    alternatively provide the spec via a #windowSpec method.
-
-    The classResources have been put into this class to allow ST/X
-    applications (which used to be subclasses of StandardSystemView)
-    to migrate smoothly into ApplicationModels (which is better design ...).
-
-
-    [Instance variables:]
-        resources    ResourcePack       language string translation
-
-        builder      WindowBuilder      a builder who knows how to create
-                                        a window hierarchy from a specification
-
-
-    Notice: this class was implemented using protocol information
-    from alpha testers and PD code - it may not be complete or compatible to
-    the corresponding ST-80 class. If you encounter any incompatibilities,
-    please forward a note to the ST/X team.
-
-
-    [author:]
-        Claus Gittinger
-
-    [see also:]
-        StandardSystemView
-        WindowGroup DeviceWorkstation
-"
-! !
-
-!ApplicationModel class methodsFor:'initialization'!
-
-initialize 
-    self == ApplicationModel ifTrue:[
-        Smalltalk addDependent:self
-    ].
-    DefaultLabels isNil ifTrue:[
-        DefaultLabels := IdentityDictionary new
-    ].
-    DefaultVisuals isNil ifTrue:[
-        DefaultVisuals := IdentityDictionary new
-    ].
-
-    "
-     ApplicationModel initialize
-    "
-
-    "Modified: 28.1.1997 / 12:31:38 / cg"
-! !
-
-!ApplicationModel class methodsFor:'instance creation'!
-
-new
-    "return a new initialized instance"
-
-    |inst|
-
-    inst := super basicNew.
-    inst basicInitialize.
-    inst initialize.
-    ^ inst
-
-    "Modified: 24.4.1996 / 09:42:14 / cg"
-!
-
-onDevice:aDevice
-    "return a new initialized instance, which shall open its interface
-     on aDevice."
+"{ Package: '__NoProject__' }"
 
-    ^ (super basicNew basicInitialize
-        setDevice:aDevice) initialize
-
-    "Modified: 24.4.1996 / 09:42:14 / cg"
-    "Created: 5.7.1996 / 12:19:15 / cg"
-! !
-
-!ApplicationModel class methodsFor:'accessing'!
-
-application
-    ^ self
-
-! !
-
-!ApplicationModel class methodsFor:'active help'!
-
-helpSpec
-    ^ IdentityDictionary new.
-! !
-
-!ApplicationModel class methodsFor:'bindings'!
-
-actionFor:aKey
-    "sent by the builder to ask for an actionBlock for
-     a Button. The argument, aKey comes from an UI-spec
-     for a buttons #action property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     actionBlocks from a Dictionary or whatever.
-     Typically, a block is returned there."
-
-    ^ nil
-
-
-!
-
-actionFor:aKey withValue:aValue
-    "sent by the builder to ask for an actionBlock for
-     a Button which passes a value to the actionMethod. 
-     The argument, aKey comes from an UI-spec
-     for a buttons #action property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     actionBlocks from a Dictionary or whatever.
-     Typically, a block is returned there."
-
-    ^ nil
-
-
-!
-
-aspectFor:aKey
-    "sent by the builder to ask for an aspect (a data model).
-     The argument, aKey comes from an UI-spec
-     for a components #aspect property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a valueHolder is returned there."
-
-    ^ self perform:aKey
-
-    "/ ^ nil
-
-    "Modified: / 27.10.1997 / 13:43:12 / cg"
-!
-
-clientFor:aKey
-    "sent by the builder to ask for an application provided
-     subcanvas's application.
-     The argument, aKey comes from an UI-spec
-     for a subcanvas's #client property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     appModels from a Dictionary or whatever.
-     Typically, an applicationModel is returned there."
-
-    ^ nil
-
-!
-
-componentFor:aKey
-    "sent by the builder to ask for an application provided
-     component.
-     The argument, aKey comes from an UI-spec
-     for a viewHolders #view property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a view is returned there."
-
-    (self respondsTo:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ nil
-!
-
-labelFor:aKey
-    "sent by the builder to ask for an application provided
-     label for a component.
-     The argument, aKey comes from an UI-spec
-     for a components #label property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     labels from a Dictionary or whatever.
-     Typically, a string is returned there."
-
-    (self application respondsTo:aKey) ifTrue:[
-        ^ self application perform:aKey
-    ].
-    ^ self application labelAt:aKey ifAbsent:nil
-
-!
-
-listFor:aKey
-    "sent by the builder to ask for an application provided
-     holder for a list.
-     The argument, aKey comes from an UI-spec
-     for a listWidgets #list property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a list-holding model (SelectionInList) is returned there."
-
-    |app|
-
-    (app := self application) notNil ifTrue:[
-        (app respondsTo:aKey) ifTrue:[
-            ^ app perform:aKey
-        ]
-    ].
-    ^ nil.
-
-    "Modified: 4.3.1997 / 00:53:03 / cg"
-!
+"{ NameSpace: SaugFix }"
 
-menuFor:aKey
-    "sent by the builder to ask for an application provided
-     holder for a menu.
-     The argument, aKey comes from an UI-spec
-     for a widgets #menu property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a menu or a menu-holding valueHolder is returned there."
-
-    ^ self application perform:aKey
-
-!
-
-specificationFor:aKey
-    "sent by the builder to ask for an application provided
-     specification for a subcanvas or subspecification.
-     The argument, aKey comes from an UI-spec
-     for a subcanvases #specification property (minorKey).
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     interfaceSpecifications from a Dictionary or whatever.
-     Typically, an interfaceSpecification is returned there."
-
-    ^ self application perform:aKey
-
-    "Modified: / 5.2.1998 / 00:21:57 / stefan"
-!
-
-visualFor:aKey
-    "sent by the builder to ask for an application provided
-     image or element for a label.
-     The argument, aKey comes from an UI-spec
-     for a widgets #label property, if LabelIsImage is turned on.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     images from a Dictionary or whatever.
-     Typically, an image is returned there."
-
-    (self application respondsTo:aKey) ifTrue:[
-        ^ self application perform:aKey
-    ].
-    ^ self application visualAt:aKey ifAbsent:nil
-
-
-! !
-
-!ApplicationModel class methodsFor:'change & update'!
-
-update:something with:aParameter from:changedObject
-    "flush resources on language changes"
-
-    something == #Language ifTrue:[
-        "flush resources on language changes"
-        self flushAllClassResources
-    ]
-
-    "Created: 15.6.1996 / 15:13:29 / cg"
-! !
-
-!ApplicationModel class methodsFor:'defaults'!
-
-defaultIcon
-    ^ nil
-!
-
-labelAt:aKey
-    ^ nil
-!
-
-labelAt:aKey ifAbsent:aBlock
-    ^ aBlock value
-!
-
-labelAt:aKey put:aValue
-    "/ not yet implemented
-!
-
-labels
-    "/ not yet implemented
-    ^ nil
-!
-
-visualAt:aKey
-    ^ nil
-!
-
-visualAt:aKey ifAbsent:aBlock
-    ^ aBlock value
-!
-
-visualAt:aKey put:aValue
-    "/ not yet implemented
-!
-
-visuals
-    "/ not yet implemented
-    ^ nil
-! !
-
-!ApplicationModel class methodsFor:'queries'!
-
-interfaceSpecFor:aSelector
-    "return an interface spec"
-
-    ^ UISpecification from:(self application specificationFor:aSelector)
-!
-
-isVisualStartable
-    "return true, if this application can be started via #open"
-
-    (self == ApplicationModel) ifTrue:[^ false "I am abstract"].
-    ((self respondsTo:#open) or:[self class implements:#openInterface]) ifFalse:[^ false].
-"/    (self respondsTo:#windowSpec) ifFalse:[^ false].
-    ^ true
-
-    "Created: / 27.10.1997 / 16:38:02 / cg"
-    "Modified: / 14.3.1998 / 16:30:50 / cg"
-! !
-
-!ApplicationModel class methodsFor:'resources'!
-
-classResources
-    "if not already loaded, get the classes resourcePack
-     and return it"
-
-    ClassResources isNil ifTrue:[
-	ClassResources := ResourcePack for:self.
-    ].
-    ^ ClassResources
-!
-
-classResources:aResourcePack
-    "allow setting of the classResources"
-
-    ClassResources := aResourcePack
-!
-
-flushAllClassResources
-    "flush all classes resource translations.
-     Needed after a resource file / language setting has changed."
-
-    ResourcePack flushCachedResourcePacks.
-    self flushClassResources.
-    self allSubclassesDo:[:aClass |
-	aClass flushClassResources.
-    ]
-!
-
-flushClassResources
-    "flush classes resource string translations.
-     Needed whenever a resource file / language setting has changed"
-
-    ClassResources := nil.
-!
-
-resources
-    "return the applications resources - thats a ResourcePack containing
-     language strings"
-
-    ^ self classResources
-
-    "Created: / 19.5.1998 / 20:14:00 / cg"
-!
-
-updateClassResources
-    "update my classResources"
-
-    ClassResources := nil.
-    self classResources
-! !
-
-!ApplicationModel class methodsFor:'startup'!
-
-open
-    "create an instance of the application and open its view"
-
-    ^ self new open
-
-    "
-     Launcher open
-    "
-
-    "Modified: 13.1.1997 / 20:54:50 / cg"
-!
-
-openAt:aLocation
-    "create an instance of the application and open its view
-     at some position."
-
-    ^ self new openAt:aLocation
-
-    "Modified: 14.2.1997 / 20:28:41 / cg"
-!
-
-openDialogInterface:anInterfaceSymbol
-    "create an instance of the application and open a view as
-     specified by anInterfaceSymbol."
-
-    ^ self openDialogInterface:anInterfaceSymbol withBindings:nil
-
-    "Modified: 5.9.1995 / 17:54:50 / claus"
-    "Created: 14.2.1997 / 20:33:10 / cg"
-    "Modified: 28.2.1997 / 14:07:36 / cg"
-!
-
-openDialogInterface:anInterfaceSymbol withBindings:bindings
-    "create an instance of the application and open a view as
-     specified by anInterfaceSymbol."
-
-    ^ self new openDialogInterface:anInterfaceSymbol withBindings:bindings
-
-    "Modified: 5.9.1995 / 17:54:50 / claus"
-    "Modified: 13.1.1997 / 20:55:02 / cg"
-    "Created: 28.2.1997 / 14:07:24 / cg"
-!
-
-openDialogInterfaceSpec:anInterfaceSpec
-    "create an instance of the application and open a view as
-     specified by the given spec."
-
-    ^ self new 
-        openDialogInterfaceSpec:anInterfaceSpec 
-        withBindings:nil
-!
-
-openDialogInterfaceSpec:anInterfaceSpec withBindings:bindings
-    "create an instance of the application and open a view as
-     specified by the given spec."
-
-    ^ self new 
-        openDialogInterfaceSpec:anInterfaceSpec 
-        withBindings:bindings
-
-    "Modified: 5.9.1995 / 17:54:50 / claus"
-    "Modified: 13.1.1997 / 20:55:02 / cg"
-    "Created: 28.2.1997 / 14:07:24 / cg"
-!
-
-openDialogSpec:aSpec
-    "create an instance of the application and open a view as
-     specified by aSpec."
-
-    ^ self openDialogSpec:aSpec withBindings:nil
-
-    "Modified: / 5.9.1995 / 17:54:50 / claus"
-    "Modified: / 28.2.1997 / 14:07:36 / cg"
-    "Created: / 20.5.1998 / 20:27:08 / cg"
-!
-
-openDialogSpec:aSpec withBindings:bindings
-    "create an instance of the application and open a view as
-     specified by the spec."
-
-    ^ self new openDialogSpec:aSpec withBindings:bindings
-
-    "Modified: / 5.9.1995 / 17:54:50 / claus"
-    "Modified: / 13.1.1997 / 20:55:02 / cg"
-    "Created: / 20.5.1998 / 20:26:37 / cg"
-!
-
-openInterface:anInterfaceSymbol
-    "create an instance of the application and open a view as
-     specified by anInterfaceSymbol."
-
-    ^ self new openInterface:anInterfaceSymbol
-
-    "Modified: 5.9.1995 / 17:54:50 / claus"
-    "Modified: 13.1.1997 / 20:55:02 / cg"
-!
-
-openInterface:anInterfaceSymbol at:aPoint
-    "create an instance of the application and open a view as
-     specified by anInterfaceSymbol."
-
-    ^ self new openInterface:anInterfaceSymbol at:aPoint
-
-    "Modified: 14.2.1997 / 20:28:47 / cg"
-!
-
-openModal
-    "create an instance of the application and open its view modal"
-
-    ^ self new openModal
-!
-
-openOn:anApplicationModel
-    "send an open message to the argument, anApplicationModel.
-     I dont really understand what this method is useful for ..."
-
-    ^ anApplicationModel open
-
-    "Modified: 13.1.1997 / 20:55:05 / cg"
+ApplicationModel subclass:#MP3FileHeader
+	instanceVariableNames:'long filesize'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'A-Exchange'
 !
 
-openOnDevice:aDevice
-    "create an instance of the application and open its view
-     on ANOTHER device. 
-     For more info, read the document on multiple display
-     support and the documentation of the DeviceWorkstation class."
-
-    ^ (self onDevice:aDevice) open
-
-    "
-     Launcher openOnDevice:Display
-    "
-
-    "Modified: 13.1.1997 / 20:55:27 / cg"
-!
-
-openOnXScreenNamed:aScreenName
-    "create an instance of the application and open its view
-     on some X display screen. The argument aScreenName must be 
-     a valid x-display name (i.e. of the form '<host>:<screenNr>' as in 'foo:0').
-     For more info, read the document on multiple display
-     support and the documentation of the DeviceWorkstation class."
-
-    |newDevice app|
-
-    newDevice := XWorkstation newDispatchingFor:aScreenName.
-    newDevice isNil ifTrue:[
-        Screen current notNil ifTrue:[
-            self warn:('Could not open display: ' , aScreenName).
-        ] ifFalse:[
-            ('Could not open display: ' , aScreenName) errorPrintCR
-        ].
-        ^ nil
-    ].
-    Screen currentScreenQuerySignal 
-        answer:newDevice
-        do:[
-            app := self open.
-        ].
-    ^ app
-
-    "
-     Launcher openOnXScreenNamed:'sgi:0'
-     Launcher openOnXScreenNamed:'foo:0'
-     NewLauncher openOnXScreenNamed:'dawn:0'
-     SystemBrowser openOnXScreenNamed:'dawn:0'
-    "
-
-    "Modified: 13.1.1997 / 20:55:27 / cg"
-!
-
-openWithSpec:aSpecSymbol
-    "ST80 compatibility:
-     mhmh - what is the difference to #openInterface ?"
-
-    ^ self openInterface:aSpecSymbol
-
-    "Modified: 29.8.1997 / 01:16:52 / cg"
-! !
-
-!ApplicationModel methodsFor:'accessing'!
-
-application
-    "application knows about interfaceSpecs, menuSpecs etc.
-     Usually this is my class.
-     This may be redefined in subclasses"
-
-    ^ self class
-
-    "Modified: / 5.2.1998 / 00:45:21 / stefan"
-!
-
-builder
-    "return the applications builder; this one has more information
-     about views, components etc."
-
-    ^ builder
-!
-
-builder:aBuilder
-    "set the applications builder. Normally, you should not set it
-     directly, but depend on the default builder, as created when the application
-     was created."
-
-    builder := aBuilder
-!
-
-focusSequence
-    "return a focusSequence for stepping through the applications views.
-     The builder usually keeps track of so-called 'tabable' views.
-     Stepping is done with the FocusNext/FocusPrevius keys, which are 
-     typically bound to Meta-CursorUp/Meta-CursorDown.
-     (unless the focus is currently attached to a textEditing view,
-      tabbing is also possible via the tab-key)
-     Subclasses which do not use the builder (but instead build their view
-     programmatically) should redefine this method to return a collection of
-     views which defines that sequence.
-     Notice, that the focuse sequence is asked for at the time of the tabbing
-     (not only during startup of the view) - so dynamically adding/removing
-     components is possible."
-
-    builder notNil ifTrue:[
-        ^ builder focusSequence
-    ].
-    ^ nil
-
-    "Modified: / 31.10.1997 / 19:11:14 / cg"
-!
-
-masterApplication
-    "return the value of the instance variable 'masterApplication' (automatically generated)"
-
-    ^ masterApplication!
-
-masterApplication:something
-    "set the value of the instance variable 'masterApplication' (automatically generated)"
-
-    something == self ifTrue:[
-        self error:'an application cannot be its own masterApplication' mayProceed:true.
-        ^ self
-    ].
-    masterApplication := something.
-!
-
-resources
-    "return the applications resources - thats a ResourcePack containing
-     language strings"
-
-    ^ resources
-!
-
-resources:aResourcePack
-    "set the applications resources - usually tis is done automatically,
-     except for manually built dialogs"
-
-    resources := aResourcePack
-!
-
-window
-    "return my topWindow - or nil, if I have no window (yet)"
-
-    |win|
-
-    builder isNil ifTrue:[^ nil].
-    (win := builder window) notNil ifTrue:[
-        ^ win
-    ].
-    masterApplication notNil ifTrue:[
-        "/ is that true ?
-        ^ masterApplication window
-    ].
-    ^ nil.
-
-    "Modified: / 18.9.1998 / 15:18:19 / cg"
-!
-
-window:aTopView
-    "set my topWindow.
-     As a side effect, this creates a dummy builder if non has yet
-     been built. This prevents non-GUI-Painter apps from failing later,
-     when the builder is accessed."
-
-    builder isNil ifTrue:[
-        self createBuilder
-    ].
-    builder window:aTopView
-
-    "Created: 18.4.1996 / 14:55:26 / cg"
-!
-
-windowGroup 
-    "return the applications windowGroup"
-
-    |w|
-
-    builder notNil ifTrue:[
-        (w := builder window) notNil ifTrue:[
-            ^ w windowGroup
-        ].
-    ].
-    masterApplication notNil ifTrue:[
-        ^ masterApplication windowGroup
-    ].
-    ^ nil
-
-    "Modified: / 7.9.1998 / 23:37:00 / cg"
-! !
-
-!ApplicationModel methodsFor:'binding access'!
-
-actionFor:aKey
-    "sent by the builder to ask for an actionBlock for
-     a Button. The argument, aKey comes from an UI-spec
-     for a buttons #action property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     actionBlocks from a Dictionary or whatever.
-     Typically, a block is returned there."
-
-     (self selfResponsibleFor:aKey) ifTrue:[
-         ^ [self perform:aKey]   "/ could use:  MessageSend receiver:self selector:aKey 
-     ].
-     ^ masterApplication actionFor:aKey
-
-    "Modified: / 28.10.1997 / 20:34:51 / cg"
-!
-
-actionFor:aKey withValue:aValue
-    "sent by the builder to ask for an actionBlock for
-     a Button which passes a value. 
-     The argument, aKey comes from an UI-spec for a buttons #action property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     actionBlocks from a Dictionary or whatever.
-     Typically, a block is returned there."
-
-     (self selfResponsibleFor:aKey) ifTrue:[
-         ^ [self perform:aKey with:aValue]
-     ].
-     ^ masterApplication actionFor:aKey withValue:aValue
-!
-
-aspectFor:aKey
-    "sent by the builder to ask for an aspect (a data model).
-     The argument, aKey comes from an UI-spec
-     for a components #aspect property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a valueHolder is returned there."
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ masterApplication aspectFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:23 / cg"
-!
-
-clientFor:aKey
-    "sent by the builder to ask for an application provided
-     subcanvas's application.
-     The argument, aKey comes from an UI-spec
-     for a subcanvas's #client property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     appModels from a Dictionary or whatever.
-     Typically, an applicationModel is returned there."
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ masterApplication clientFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:30 / cg"
-!
-
-componentFor:aKey
-    "sent by the builder to ask for an application provided
-     component.
-     The argument, aKey comes from an UI-spec
-     for a viewHolders #view property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a view is returned there."
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ masterApplication componentFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:36 / cg"
-!
-
-helpTextFor:aComponent
-    "activeHelp interface: return some help text for a widget component"
-
-    |key cls|
-
-    builder notNil ifTrue:[
-        cls := self class.
-
-        (cls respondsTo:#helpSpec) ifTrue:[
-            (key := builder helpKeyFor:aComponent) notNil ifTrue:[
-                ^ self helpTextForKey:key
-            ]
-        ]
-    ].
-    masterApplication notNil ifTrue:[
-        ^ masterApplication helpTextFor:aComponent
-    ].
-    ^ nil
-
-    "Modified: / 31.7.1998 / 23:03:10 / cg"
-!
+!MP3FileHeader class methodsFor:'instance creation'!
 
-helpTextForKey:aKey
-    "activeHelp interface: return some help text for a key
-     key is the symbol associated with some widget or menu item.
-     (from my helpSpec); return a language variant (if available)"
-
-    |cls helpText|
-
-    cls := self class.
-
-    (cls respondsTo:#helpSpec) ifTrue:[
-        helpText := (cls helpSpec) at:aKey ifAbsent:nil
-    ].
-    (masterApplication notNil and:[helpText isNil]) ifTrue:[
-        helpText := masterApplication helpTextForKey:aKey
-    ].
-    "/ translate.
-    resources notNil ifTrue:[
-        ^ resources string:helpText
-    ].
-    ^ helpText
-
-    "Modified: / 4.2.2000 / 15:30:16 / cg"
-!
-
-labelFor:aKey
-    "sent by the builder to ask for an application provided
-     label for a component.
-     The argument, aKey comes from an UI-spec
-     for a components #label property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     labels from a Dictionary or whatever.
-     Typically, a string is returned there."
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ masterApplication labelFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:42 / cg"
-!
-
-listFor:aKey
-    "sent by the builder to ask for an application provided
-     holder for a list (for example, a popUpLists list).
-     The argument, aKey comes from an UI-spec
-     for a listWidgets #list property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a list-holding model (SelectionInList) is returned there.
-     If the instance does not provide a value, a corresponding aspect
-     is asked for. If that fails as well, the app class is asked as a last
-     chance."
-
-    |a|
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    a := self aspectFor:aKey.
-    a notNil ifTrue:[
-        ^ a
-    ].
-    ^ self application listFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:50 / cg"
-!
-
-menuFor:aKey
-    "sent by the builder to ask for an application provided
-     holder for a menu.
-     The argument, aKey comes from an UI-spec
-     for a widgets #menu property.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     holders from a Dictionary or whatever.
-     Typically, a menu or a menu-holding valueHolder is returned there."
-
-    (self selfResponsibleFor:aKey) ifTrue:[
-        ^ self perform:aKey
-    ].
-    ^ masterApplication menuFor:aKey
-
-    "Modified: / 18.6.1998 / 20:33:56 / cg"
-!
-
-specificationFor:aKey
-    "sent by the builder to ask for an application provided
-     specification for a subcanvas or subspecification.
-     The argument, aKey comes from an UI-spec
-     for a subcanvases #specification property (minorKey).
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     interfaceSpecifications from a Dictionary or whatever.
-     Typically, an interfaceSpecification is returned there."
-
-     |app|
-
-    "/(self selfResponsibleFor:aKey)       "/ rubbish
-    (self respondsTo:aKey)
-    ifTrue:[     
-        ^ self perform:aKey
-    ].
-    ((app := self application) respondsTo:aKey) ifTrue:[
-        ^ app perform:aKey
-    ].
-    ^ masterApplication specificationFor:aKey
-
-    "Modified: / 5.2.1998 / 00:31:39 / stefan"
-    "Modified: / 18.6.1998 / 20:34:02 / cg"
-!
-
-visualFor:aKey
-    "sent by the builder to ask for an application provided
-     image or element for a label.
-     The argument, aKey comes from an UI-spec
-     for a widgets #label property, if LabelIsImage is turned on.
-     Here, a corresponding message is sent to myself,
-     which ought to be defined in the application subclass.
-     Alternatively, a subclass may redefine this method, to provide
-     images from a Dictionary or whatever.
-     Typically, an image is returned there."
-
-    ^ self application visualFor:aKey
-
-! !
-
-!ApplicationModel methodsFor:'change & update'!
-
-delayedUpdate:something with:aParameter from:changedObject
-    "support for delayed updates - 
-     subclasses which invoke #enqueueDelayedUpdate:with:from: (from #update:with:from:)
-     must also redefine this method, and perform the actual update there."
-
-    ^ self
-!
-
-enqueueDelayedUpdate:something with:aParameter from:changedObject
-    "support for delayed updates - to be invoked from a concrete classes
-     #update:with:from: method.
-     This will enqueue a delayed update, and resend #delayedUpdate:with:from:
-     whenever the receiver is handling events.
-     Especially useful, if many updates arrive at high frequency, to avoid
-     multiple redraws."
+from: aFilename
 
-    ^ self
-        enqueueMessage:#delayedUpdate:with:from:
-        for:self
-        arguments:(Array 
-                        with:something 
-                        with:aParameter 
-                        with:changedObject).
-
-    "Modified: / 26.2.2000 / 18:01:44 / cg"
-!
-
-enqueueMessage:selector for:someone arguments:argList
-    "enqueue a message to be sent to myself later, when my process
-     is back in its eventLoop. Also, filter duplicates.
-     This is useful, to buffer redraws and avoid flicker due to multiple
-     redraws (especially in browsers, when reacting on changeMessages resulting
-     from changes made in other browsers)"
-
-    |window sensor|
-
-    (window := self window) notNil ifTrue:[
-        sensor := window sensor.
-    ].
-    sensor isNil ifTrue:[
-        "/ already closed, or not yet open
-
-        ^ someone perform:selector withArguments:argList.
-    ].
-
-    "/
-    "/ if such a message is already in the queue, ignore it.
-    "/ Otherwise push it as an event, to be handled when my thread is
-    "/ back in the event loop.
-    "/
-    (sensor 
-      hasEvent:selector
-      for:someone
-      withArguments:argList) ifTrue:[
-        ^ self
-    ].
-    sensor
-      pushUserEvent:selector
-      for:someone
-      withArguments:argList
-
-    "Modified: / 5.2.2000 / 00:01:54 / cg"
-    "Created: / 26.2.2000 / 18:01:31 / cg"
-! !
-
-!ApplicationModel methodsFor:'component manipulations'!
-
-components:aSymbolOrArray do:aBlock
-    "evaluate aBlock for all components listed aSymbolOrArray."
-
-    |coll|
-
-    aSymbolOrArray isSymbol ifTrue:[
-        "/ a single components name
-        coll := Array with:aSymbolOrArray
-    ] ifFalse:[
-        coll := aSymbolOrArray
-    ].
-    coll do:[:aSymbol |
-        |component|
-
-        (component := self componentFor:aSymbol) isNil ifFalse:[
-            aBlock value:component
-        ]
-    ]
-
-    "Modified: 26.3.1997 / 16:23:14 / cg"
-!
-
-disable:aSymbolOrArray
-    "disable the components whose id's are aSymbolOrArray."
-
-    self components:aSymbolOrArray do:[:comp | comp disable]
-
-    "Modified: 14.2.1997 / 17:32:09 / cg"
-!
-
-enable:aSymbolOrArray
-    "enables the component(s) identified by aSymbolOrArray."
-
-    self components:aSymbolOrArray do:[:comp | comp enable]
-
-    "Modified: 14.2.1997 / 17:32:19 / cg"
-!
-
-invalidate:aSymbolOrArray
-    "invalidates the component(s) identified by aSymbolOrArray."
-
-    self components:aSymbolOrArray do:[:comp | comp invalidate]
-
-    "Modified: 14.2.1997 / 17:32:28 / cg"
-!
-
-makeInvisible:aSymbolOrArray
-    "makes the components whose id's are aSymbolOrArray invisible"
-
-    self components:aSymbolOrArray do:[:comp | comp beInvisible]
-
-    "Modified: 14.2.1997 / 17:32:42 / cg"
-!
-
-makeReadOnly:aSymbolOrArray
-    "make all components identified by aSymbolOrArray read only
-     (for editText components)."
-
-    self components:aSymbolOrArray do:[:comp | comp readOnly:true]
-
-    "Modified: 14.2.1997 / 17:36:22 / cg"
-!
-
-makeVisible:aSymbolOrArray
-    "makes the components whose id's are aSymbolOrArray visible"
-
-    self components:aSymbolOrArray do:[:comp | comp beVisible]
-
-    "Modified: 14.2.1997 / 17:32:52 / cg"
-!
-
-makeWritable:aSymbolOrArray
-    "make all components identified by aSymbolOrArray writable 
-     (for editText components)."
-
-    self components:aSymbolOrArray do:[:comp | comp readOnly:false]
-
-    "Created: 14.2.1997 / 17:36:17 / cg"
-! !
-
-!ApplicationModel methodsFor:'copying'!
-
-postCopy
-    builder := device := nil.
-
-    "Created: / 19.4.1998 / 11:44:44 / cg"
-! !
-
-!ApplicationModel methodsFor:'drag & drop'!
-
-canDrop:aCollectionOfDropObjects in:aComponent
-    "drop manager asked if a drop is possible
-     - should be redefined by apps which can do it, to return true"
-
-    ^ false
-
-    "Modified: 11.4.1997 / 12:42:47 / cg"
-!
-
-drop:aCollectionOfDropObjects in:aComponent at:aPoint
-    "drop manager wants to drop.
-     This is ony sent, if #canDrop:in: returned true.
-     Must be redefined in apps which return true to #canDrop."
-
-    self subclassResponsibility
-
-    "Modified: 11.4.1997 / 12:43:19 / cg"
+     ^ super new filename: aFilename
 ! !
 
-!ApplicationModel methodsFor:'easy bindings'!
-
-registerInterestIn:aValueModel using:aSelectorOrArray
-    "Register interest in a change in aValueModel using information in aSelectorOrArray.
-     aSelectorOrArray can be one of three things:  
-
-            1) nil                  in which case no interest is registered
-            2) a selector           in which case the receiver is understood to be self
-            3) an Array             in which case the size is two where the first element is the
-                                    message to be sent and the second element is the receiver."
-
-    aSelectorOrArray isNil ifTrue:[^ aValueModel].
-
-    (aSelectorOrArray isArray) ifTrue:[
-        aValueModel onChangeSend:(aSelectorOrArray at:1) to:(aSelectorOrArray at:2)
-    ] ifFalse: [
-        aValueModel onChangeSend:aSelectorOrArray to:self
-    ].
-    ^aValueModel
-
-    "Modified: / 31.10.1997 / 18:19:44 / cg"
-!
-
-valueHolderFor:aSelector initialValue:anObject
-    "Return a ValueHolder on anObject." 
-
-    ^ self valueHolderFor:aSelector initialValue:anObject changeMessage:nil
-
-
-!
-
-valueHolderFor:aSelector initialValue:anObject changeMessage:aSelectorOrArrayOrNil
-    "Return a ValueHolder on anObject.  aSelectorOrArrayOrNil is the change information 
-     for the ValueHolder.  This argument is either a Symbol or an Array of two elements.  
-     If it is a Symbol, then it is the change message and the interested object is understood
-     to be the reciever.  If it is an Array, then the first element is the change message and 
-     the second element is the interested object. " 
-
-    |holder|
-
-    (builder bindings includesKey:aSelector) ifFalse:[
-        holder := ValueHolder with:anObject.
-        builder aspectAt:aSelector put:holder.
-        aSelectorOrArrayOrNil notNil ifTrue:[
-            ^ self registerInterestIn:holder using:aSelectorOrArrayOrNil
-        ].
-        ^ holder
-    ].
-    ^ builder aspectAt:aSelector
-
-    "Modified: / 21.5.1998 / 03:31:28 / cg"
-! !
-
-!ApplicationModel methodsFor:'help'!
-
-openAboutThisApplication
-    "opens an about box for this application."
-
-    |rev box myClass clsRev image msg|
-
-    rev := ''.
-    myClass := self class.
-
-    (clsRev := myClass revision) notNil ifTrue: [rev := '  (rev: ', clsRev printString, ')'].
-
-    msg := '\' withCRs , myClass name asBoldText, rev.
+!MP3FileHeader methodsFor:'accessing'!
 
-    AboutBox isNil ifTrue:[
-        "/ this handles bad installations of ST/X,
-        "/ where the AboutBox is missing.
-        "/ (May vanish in the future)
-        ^ self information:msg
-    ].
-
-    box := AboutBox title:msg.
-
-    image := self class defaultIcon.
-    image notNil ifTrue:[
-        box image:image
-    ].
-    box label:'About This Application'.
-    box autoHideAfter:10 with:[].
-    box showAtPointer.
-!
-
-openHelpViewOnFile:pathToHelpText
-    "open a help viewer (as opened by the help buttons).
-     The argument is a relative path within the help directory
-     (but a file under the current directory is tried first)"
-
-    self withWaitCursorDo:[
-        HTMLDocumentView openFullOnHelpFile:pathToHelpText
-    ]
-
-!
-
-showActiveHelp:aHelpText for:view
-    "This is invoked from the activeHelp event listener, to display some popup-help
-     for a component. If false is returned, the help manager will pop up
-     some active help bubble; if true is returned, it will assume that the
-     help text has been already displayed and will not do any further actions.
-     Here, we accept the help text, and push an event into out own input
-     queue, so that the help text will be displayed asyncronously by myself,
-     vis the #showHelp:for: method.
-     This can be redefined in concrete classes to handle active help differently."
-
-    |wg mySensor|
-
-    self showingHelp ifFalse: [
-        ^ true
-    ].
-
-"/    masterApplication notNil ifTrue:[
-"/        (masterApplication showActiveHelp:aHelpText for:view) ifTrue:[
-"/            ^ true
-"/        ]
-"/    ].
-
-    "/ NEW: push it into the event queue, to have it displayed
-    "/ syncronously with other events.
-    "/ (also any errors are reported as occurring in my context;
-    "/  instead of occurring in the activeHelp context).
-
-    (wg := self windowGroup) notNil ifTrue:[
-        mySensor := wg sensor.
-        mySensor notNil ifTrue:[
-            mySensor flushEventsFor:self withType:#showHelp:for:.
-            mySensor 
-                pushUserEvent:#showHelp:for: for:self 
-                withArguments:(Array with:aHelpText with:view).
-            ^ true
-        ]
-    ].
-
-    "/ mhmh - can this happen ?
-
-    ^ true
-
-    "Modified: / 21.8.1998 / 16:00:37 / cg"
-!
+bitrate
 
-showHelp:aHelpText for:view
-    "actual method which is supposed to display the help text.
-     Should be redefined in concrete classes, to put the help text
-     into some info label, or the windows title bar.
-     Here, the help text is ignored."
-
-    masterApplication notNil ifTrue:[
-        masterApplication showHelp:aHelpText for:view
-    ].
-
-    "Modified: / 31.7.1998 / 19:13:59 / cg"
-!
-
-showingHelp
-    "return true, if the activeHelp manager should invoke my #showHelp:for:
-     method, when the mouse pointer is moved over my widgets.
-     The default here is true, however, the #showHelp:for: methods are empty.
-     These should be redefined to put the help text into some info label,
-     or into the views title bar.
-     You may also redefine the showingHelp/showingHelp: methods, to
-     remember the flag setting."
-
-    ^ true
-
-    "Modified: / 31.7.1998 / 17:55:31 / cg"
-! !
-
-!ApplicationModel methodsFor:'initialization'!
-
-addTopViewsToCurrentProject
-    "add all of my topViews to the current projects list of views.
-     This allows hiding views on a per-project basis.
-     Applications which do not want to be switched with projects
-     (such as the Launcher), may redefine this to a noop."
-
-    (self windowGroup topViews ? #()) do:[:aView |
-        aView addToCurrentProject
-    ]
-
-    "Modified: 17.1.1997 / 19:43:39 / cg"
-!
-
-basicInitialize
-    "initialize the application.
-     Since ST-80 applications seem commonly to redefine #initialize
-     without doing a super initialize, the real initialization is
-     done here ..."
-
-    device := Screen current.
-
-    "claus: I wanted to delay the creation & assignment of the
-     builder till later, to allow setting to another builder.
-     however, some ST-80 code accesses the builder right after instance
-     creation ..."
-
-"/    "
-"/     Create a windowBuilder to have someone around which
-"/     understands the builder protocol. Since UIBuilder is not present
-"/     in all systems, this allows operation without one (unless a spec
-"/     is read later ...)
-"/    "
-
-    "/ changed - cg; create the builder later.
-    "/ some apps (RefactoringBrowser) depend on this being set
-    "/ late.
-
-"/    builder := self builderClass new.
-"/    builder notNil ifTrue:[builder application:self].
-    resources := self class classResources.
-
-    "Modified: / 20.6.1998 / 11:53:36 / cg"
-!
+    "/ Original table from a MP3 documentation:
+    "/
+    "/    Bit 16   Bit 17   Bit 18   Bit 19   Dezimal   MPEG 1       MPEG 1       MPEG 1       MPEG 2       MPEG 2       MPEG 2
+    "/                                                  Layer I      Layer II     Layer III    Layer I      Layer II     Layer III
+    "/    0        0        0        0        0         -            -            -            -            -            -
+    "/    0        0        0        1        1          32 kBit/s    32 kBit/s    32 kBit/s    32 kBit/s    32 kBit/s     8 kBit/s
+    "/    0        0        1        0        2          64 kBit/s    48 kBit/s    40 kBit/s    64 kBit/s    48 kBit/s    16 kBit/s
+    "/    0        0        1        1        3          96 kBit/s    56 kBit/s    48 kBit/s    96 kBit/s    56 kBit/s    24 kBit/s
+    "/    0        1        0        0        4         128 kBit/s    64 kBit/s    56 kBit/s   128 kBit/s    64 kBit/s    32 kBit/s
+    "/    0        1        0        1        5         160 kBit/s    80 kBit/s    64 kBit/s   160 kBit/s    80 kBit/s    64 kBit/s
+    "/    0        1        1        0        6         192 kBit/s    96 kBit/s    80 kBit/s   192 kBit/s    96 kBit/s    80 kBit/s
+    "/    0        1        1        1        7         224 kBit/s   112 kBit/s    96 kBit/s   224 kBit/s   112 kBit/s    56 kBit/s
+    "/    1        0        0        0        8         256 kBit/s   128 kBit/s   112 kBit/s   256 kBit/s   128 kBit/s    64 kBit/s
+    "/    1        0        0        1        9         288 kBit/s   160 kBit/s   128 kBit/s   288 kBit/s   160 kBit/s   128 kBit/s
+    "/    1        0        1        0       10         320 kBit/s   192 kBit/s   160 kBit/s   320 kBit/s   192 kBit/s   160 kBit/s
+    "/    1        0        1        1       11         352 kBit/s   224 kBit/s   192 kBit/s   352 kBit/s   224 kBit/s   112 kBit/s
+    "/    1        1        0        0       12         384 kBit/s   256 kBit/s   224 kBit/s   384 kBit/s   256 kBit/s   128 kBit/s
+    "/    1        1        0        1       13         416 kBit/s   320 kBit/s   256 kBit/s   416 kBit/s   320 kBit/s   256 kBit/s
+    "/    1        1        1        0       14         448 kBit/s   384 kBit/s   320 kBit/s   448 kBit/s   384 kBit/s   320 kBit/s
+    "/    1        1        1        1       15         -            -            -            -            -            -
 
-initialize
-    "nothing done here;
-     but can be redefined in concrete applications"
-!
-
-setDevice:aDevice
-    "set the device (i.e. some Screen), where the application
-     shall open its view(s).
-     The default device (if not set here) will be the current screen."
-
-    device := aDevice
-
-    "Created: 5.7.1996 / 12:01:40 / cg"
-    "Modified: 17.1.1997 / 19:44:09 / cg"
-! !
-
-!ApplicationModel methodsFor:'misc'!
-
-information:aString
-    "like Objects information, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super information:(resources string:aString) withCRs
-
-    "Created: / 20.5.1998 / 03:48:43 / cg"
-!
-
-restoreCursors
-    "restore the original cursors in all of my views"
-
-    ^ self window windowGroup restoreCursors
-
-    "Created: 1.6.1996 / 17:01:24 / cg"
-!
+    | index |
+    index := 1 + ( ( long copy bitAnd: 2r00000000000000001111000000000000 ) >> ( 32 - 20 ) ).
+    index := index   +   ( 16 * ( self layer - 1 ) )   +   ( 48 * ( self version - 1) ).
 
-showCursor:aCursor
-    "set all of my views cursor to aCursor.
-     It can be restored with #restoreCursor."
-
-    ^ self window windowGroup showCursor:aCursor
-
-    "Created: 1.6.1996 / 17:01:09 / cg"
-!
-
-warn:aString
-    "like Objects warn, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super warn:(resources string:aString) withCRs
-
-    "Created: / 20.5.1998 / 01:14:52 / cg"
-!
-
-warn:aString with:arg
-    "like Objects warn, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super warn:(resources string:aString with:arg) withCRs
-
-!
-
-warn:aString with:arg1 with:arg2
-    "like Objects warn, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super warn:(resources string:aString with:arg1 with:arg2) withCRs
-
-!
-
-warn:aString with:arg1 with:arg2 with:arg3
-    "like Objects warn, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super warn:(resources string:aString with:arg1 with:arg2 with:arg3) withCRs
-
+    ^ #( nil  32  64  96 128 160 192 224 256 288 320 352 384 416 448  nil 
+         nil  32  48  56  64  80  96 112 128 160 192 224 256 320 384  nil 
+         nil  32  40  48  56  64  80  96 112 128 160 192 224 256 320  nil 
+         nil  32  64  96 128 160 192 224 256 288 320 352 384 416 448  nil
+         nil  32  48  56  64  80  96 112 128 160 192 224 256 320 348  nil 
+         nil   8  16  24  32  64  80  56  64 128 160 112 128 256 320  nil ) at: index.
 !
 
-warn:aString with:arg1 with:arg2 with:arg3 with:arg4
-    "like Objects warn, but translates the string via the
-     resourcePack, thus giving a translated string automatically"
-
-    super warn:(resources string:aString with:arg1 with:arg2 with:arg3 with:arg4) withCRs
-
-    "Created: / 23.2.2000 / 09:43:04 / cg"
-!
-
-withCursor:aCursor do:aBlock
-    "evaluate aBlock, showing aCursor in my topView and all of its subviews.
-     Return the value of aBlock."
-
-    |w ret|
-
-    w := self window.
-    w notNil ifTrue:[
-        ^ w withCursor:aCursor do:aBlock
-    ].
-    aCursor showWhile:[ret := aBlock value].
-    ^ ret.
-
-    "Modified: / 23.9.1998 / 17:00:25 / cg"
-!
-
-withExecuteCursorDo:aBlock
-    "evaluate aBlock, showing an executeCursor in my topView and all of its subviews.
-     Return the value of aBlock."
+copyright
 
-    ^ self withCursor:(Cursor execute) do:aBlock
-
-    "Created: 14.12.1995 / 20:57:03 / cg"
-!
-
-withReadCursorDo:aBlock
-    "evaluate aBlock, showing a readCursor in my topView and all of its subviews.
-     Return the value of aBlock."
-
-    ^ self withCursor:(Cursor read) do:aBlock
-
-    "Created: 14.12.1995 / 20:56:47 / cg"
-    "Modified: 14.12.1995 / 20:57:36 / cg"
-!
-
-withWaitCursorDo:aBlock
-    "evaluate aBlock, showing a waitCursor in my topView and all of its subviews.
-     Return the value of aBlock."
-
-    ^ self withCursor:Cursor wait do:aBlock
-! !
-
-!ApplicationModel methodsFor:'opening'!
-
-allButOpen
-    "create my views from the windowSpec, but do not open the main window."
-
-    ^ self allButOpenInterface:#windowSpec.
-
-    "Modified: / 19.6.1998 / 01:48:26 / cg"
+    ^ ( long bitAt: ( 32 - 28 ) ) == 1.
 !
 
-allButOpenFrom:aSpec
-    "create my views but do not open the main window.
-     The argument is a spec which defines the interface."
-
-    |realBuilder window|
+filename: aFilename
 
-"/ DISABLED; see comment in basicInitialize
-"/
-"/    "
-"/     here, we kludge a bit: up to now, the builder was an
-"/     instance of the no-op WindowBuilder. Now, it becomes
-"/     a UIBuilder ....
-"/     This allows for ApplicationModels without a UIBuilder
-"/     if not needed.
-"/    "
-"/    realBuilder := UIBuilder new.
-"/    builder := realBuilder.
-"/    builder application:self.
-"/    builder bindings:builder bindings.
-
-    builder isNil ifTrue:[
-        self createBuilder.
-    ].
-
-    self preBuildWith:builder.
-    builder buildFromSpec:aSpec.
-    window := builder window.
-    window model:self.
-    (window respondsTo:#application:) ifTrue:[
-        window application:self.
-    ].
-    self showingHelp ifTrue: [ActiveHelp startFor: self].
-    self postBuildWith:builder.
-
-    "Modified: / 19.6.1998 / 03:35:31 / cg"
-!
+    | stream start |
+    stream := aFilename readStream.
 
-allButOpenInterface:aSymbol
-    "create my views but do not open the main window.
-     The argument specifies a selector of a method,
-     which when sent to myself should return a spec.
-     Notice, this returns the windowBuilder."
-
-    self allButOpenFrom:(self interfaceSpecFor:aSymbol).
-    ^ builder
-
-    "Modified: / 19.6.1998 / 01:48:26 / cg"
-!
-
-buildSubCanvas:spec withBuilder:aBuilder
-    "build a subcanvases spec into aSubcanvas"
-
-    |sameApp prevSpec prevSource specToBuild|
+    start  := stream peek.
 
-    builder isNil ifTrue:[
-        builder := aBuilder.
-        aBuilder isNil ifTrue:[
-            self createBuilder
-        ]
-    ] ifFalse:[
-        prevSpec := aBuilder spec.
-        prevSource := aBuilder source.
-    ].
-
-    aBuilder source:self.
-
-    "/ if the subcanvases appModel is NOT the same as
-    "/ the topApp, it must be pre/post-built.
-    "/ Otherwise, we invoke pre/post-builtAsSubcanvas.
-    "/ which provides a hook for redefinition in concrete appModels.
-    "/ This avoids invoking pre/postBuild twice for subCanvases which
-    "/ have the topApp as appModel.
-
-    sameApp := aBuilder application == aBuilder window topView application.
-    sameApp ifTrue:[
-        self preBuildAsSubcanvasWith:aBuilder.
-    ] ifFalse:[
-        self preBuildWith:aBuilder.
+    "Is there a sync?"
+    start = 255 asCharacter ifFalse: [   "Seems to have an MP3V2 ID3 Information at file beginning."
+        stream skipFor: 255 asCharacter. "We take next sync point. Best we could do."
+        stream backStep.
+        stream backStep.
     ].
 
-    "/ subapps should not build the menu and other fullSpec stuff.
-    spec class == FullSpec ifTrue:[
-        specToBuild := spec component.
-    ] ifFalse:[
-        specToBuild := spec.
-    ].
-    aBuilder buildFromSpec:specToBuild.
-
-    sameApp ifTrue:[
-        self postBuildAsSubcanvasWith:aBuilder.
-    ] ifFalse:[
-        self postBuildWith:aBuilder.
-    ].
-
-    prevSpec notNil ifTrue:[
-        "/ restore state in builder if original builder was used
-        aBuilder spec:prevSpec.
-        aBuilder source:prevSource.
-    ].
-
-    ^ aBuilder
-
-    "Created: / 18.6.1998 / 20:08:45 / cg"
-    "Modified: / 8.7.1998 / 18:30:46 / cg"
-!
-
-open
-    "open a standard interface"
-
-    ^ self openInterface
-
-    "Modified: 3.5.1996 / 13:39:15 / cg"
-!
-
-openAt:aPoint
-    "open a standard interface at some point"
-
-    ^ self openInterfaceAt:aPoint
+    long := stream nextLong.
 
-    "Modified: 3.5.1996 / 13:39:15 / cg"
-    "Created: 14.2.1997 / 20:17:41 / cg"
-!
-
-openDialog
-    "open the window - assumes that the builder has already setup
-     the interface."
-
-    ^ builder openDialog.
-
-    "Modified: 14.2.1997 / 20:32:52 / cg"
-!
-
-openDialogInterface:aSelector
-    "open a dialog"
-
-    ^ self openDialogInterface:aSelector withBindings:nil
+    filesize := stream size.
 
-    "Modified: 28.2.1997 / 14:08:01 / cg"
-!
-
-openDialogInterface:aSelector withBindings:bindings
-    "open a dialog, given a spec-selector"
-
-    ^ SimpleDialog new 
-        openFor:self 
-        interface:aSelector 
-        withBindings:bindings
-
-    "Created: / 28.2.1997 / 14:07:45 / cg"
-    "Modified: / 23.1.1998 / 18:18:14 / cg"
-!
-
-openDialogInterfaceSpec:aSpec withBindings:bindings
-    "open a dialog, given a spec"
-
-    ^ SimpleDialog new 
-        openFor:self 
-        interfaceSpec:aSpec 
-        withBindings:bindings
+    stream close.
 
-    "Created: / 28.2.1997 / 14:07:45 / cg"
-    "Modified: / 23.1.1998 / 18:18:14 / cg"
-!
-
-openDialogSpec:aSpec withBindings:bindings
-    "open a dialog"
-
-    ^ SimpleDialog new 
-        openFor:self 
-        spec:aSpec 
-        withBindings:bindings
-
-    "Modified: / 23.1.1998 / 18:18:14 / cg"
-    "Created: / 20.5.1998 / 20:27:56 / cg"
-!
-
-openInterface
-    "open a standard interface.
-
-     Subclasses which do not have an interfaceSpec 
-     should redefine this method and create & open their view(s) there.
-     (see Launcher as an example)."
-
-    ^ self openInterface:#windowSpec
-
-    "Modified: / 9.9.1996 / 22:39:23 / stefan"
-    "Modified: / 23.1.1998 / 18:16:50 / cg"
-!
-
-openInterface:aSymbol
-    "open a specific interface. 
-     The argument, aSymbol specifies which interface. The concrete
-     application subclass must provide a method with that name,
-     which must return an interfaceSpec. This is forwarded to
-     the builder to create the views.
-     Typically, applications only use one interface, 
-     returned by the #windowSpec method."
-
-    self allButOpenInterface:aSymbol.
-    self openWindow.
-    ^ builder
-
-    "Modified: 14.2.1997 / 20:25:33 / cg"
-!
-
-openInterface:aSymbol at:aLocation
-    "open a specific interface. 
-
-     The argument, aSymbol specifies which interface. The concrete
-     application subclass must provide a method with that name,
-     which must return an interfaceSpec. This is forwarded to
-     the builder to create the views.
-     Typically, applications only use one interface, 
-     returned by the #windowSpec method."
-
-    self allButOpenInterface:aSymbol.
-    self openWindowAt:aLocation.
-    ^ builder
-
-    "Created: 14.2.1997 / 20:19:44 / cg"
-!
-
-openInterfaceAt:aLocation
-    "open a standard interface."
-
-    ^ self openInterface:#windowSpec at:aLocation
-
-    "Created: / 14.2.1997 / 20:18:20 / cg"
-    "Modified: / 23.1.1998 / 18:17:13 / cg"
-!
-
-openInterfaceModal
-    "open a standard interface as a modal dialog.
-
-     Subclasses which do not have an interfaceSpec 
-     should redefine this method and create & open their view(s) there.
-     (see Launcher as an example)."
-
-    ^ self openInterfaceModal:#windowSpec
-
-    "Modified: / 9.9.1996 / 22:39:23 / stefan"
-    "Modified: / 23.1.1998 / 18:17:17 / cg"
+"/    Transcript
+"/        cr;
+"/        showCr: aFilename asString;
+"/        cr;
+"/        showCr: 'header:           ', ( ( long printStringBase: 2 ) leftPaddedTo: 32 with: $0 );
+"/        showCr: 'Size:             ', filesize               printString;
+"/        showCr: 'Version:          ', self version           printString;
+"/        showCr: 'Layer:            ', self layer             printString;
+"/        showCr: 'Protection:       ', self protection        printString;
+"/        showCr: 'Bitrate:          ', self bitrate           printString;
+"/        showCr: 'Sample frequnecy: ', self samplingFrequency printString;
+"/        showCr: 'Padding:          ', self padding           printString;
+"/        showCr: 'Private:          ', self private           printString;
+"/        showCr: 'Mode:             ', self mode              printString;
+"/        showCr: 'Copyright:        ', self copyright         printString;
+"/        showCr: 'Original home:    ', self originalHome      printString;
+"/        showCr: 'Length:           ', self length            printString.
 !
 
-openInterfaceModal:aSymbol
-    "open a specific interface as a modal dialog. 
-     The argument, aSymbol specifies which interface. The concrete
-     application subclass must provide a method with that name,
-     which must return an interfaceSpec. This is forwarded to
-     the builder to create the views.
-     Typically, applications only use one interface, 
-     returned by the #windowSpec method."
-
-    self allButOpenInterface:aSymbol.
-    self openWindowModal.
-    ^ builder
-
-    "Modified: 14.2.1997 / 20:25:33 / cg"
-!
-
-openInterfaceModal:aSymbol at:location
-    "open a specific interface modal at some screen location. 
-     The argument, aSymbol specifies which interface. The concrete
-     application subclass must provide a method with that name,
-     which must return an interfaceSpec. This is forwarded to
-     the builder to create the views.
-     Typically, applications only use one interface, 
-     returned by the #windowSpec method."
-
-    self allButOpenInterface:aSymbol.
-    self openWindowModalAt:location.
-    ^ builder
-
-    "Modified: 14.2.1997 / 20:25:33 / cg"
-!
-
-openModal
-    "open a standard interface as a modal dialog"
-
-    ^ self openInterfaceModal
-
-    "Modified: 3.5.1996 / 13:39:15 / cg"
-!
-
-openOnDevice:aDevice
-    "open a standard interface on some other device"
-
-    self setDevice:aDevice.
-    ^ self open
-
-    "Created: 13.1.1997 / 21:24:11 / cg"
-    "Modified: 13.1.1997 / 21:24:30 / cg"
-!
-
-openSpec:anInterfaceSpec
-    "open a view as specified in anInterfaceSpec."
-
-    self allButOpenFrom:anInterfaceSpec.
-    self openWindow.
-    ^ builder
-
-    "Modified: / 14.2.1997 / 20:25:33 / cg"
-    "Created: / 20.5.1998 / 20:08:51 / cg"
-!
-
-openSpecModal:anInterfaceSpec
-    "open an interface spec modal"
-
-    self allButOpenFrom:anInterfaceSpec.
-    self openWindowModal.
-    ^ builder
-
-    "Modified: / 14.2.1997 / 20:25:33 / cg"
-    "Created: / 20.5.1998 / 20:20:21 / cg"
-!
+layer
 
-openWindow
-    "open the window - assumes that the builder has already setup
-     the interface."
-
-    builder openWindow.
-
-    "Created: 14.2.1997 / 20:20:39 / cg"
-!
-
-openWindowAt:aLocation
-    "open the window - assumes that the builder has already setup
-     the interface."
-
-    builder openWindowAt:aLocation.
-
-    "Created: 14.2.1997 / 20:20:55 / cg"
-!
-
-openWindowAtCenter
-    "open the window centered on the screen
-     - assumes that the builder has already setup the interface."
-
-    builder openWindowAt:#center
-
-    "Created: 14.2.1997 / 20:20:55 / cg"
-!
-
-openWindowModal
-    "open the window - assumes that the builder has already setup
-     the interface."
-
-"/    builder openDialog.
-    builder
-        openAt:nil 
-        withExtent:nil 
-        andType:#dialog
+    "/ Original table from a MP3 documentation:
+    "/
+    "/    Bit 13    Bit 14    Dezimal   Layer
+    "/    0         0         0         undef.
+    "/    0         1         1         Layer III
+    "/    1         0         2         Layer II
+    "/    1         1         3         Layer I
 
-    "Created: 14.2.1997 / 20:20:39 / cg"
-!
-
-openWindowModalAt:aLocation
-    "open the window modal - assumes that the builder has already setup
-     the interface."
-
-    builder openDialogAt:aLocation.
-
-    "Created: 14.2.1997 / 20:20:55 / cg"
-!
-
-postApplicationProcessCreate:newProcess windowGroup:newGroup
-    "this is sent whenever a new application is launched from this app, 
-     which forks its own windowGroup process. Allows for process group management,
-     or process-global exception handlers to be installed.
-     Nothing done here - to be redefined in concrete applications"
+    | index |
+    index := ( long copy bitAnd: 2r00000000000001100000000000000000 ) >> ( 32 - 15 ).
 
-!
-
-postBuildAsSubcanvasWith:aBuilder
-    "this is sent after an interface is built from a spec as subcanvas.
-     Can be redefined in subclasses for additional setup after
-     the subcanvas view has been built, but not yet opened."
-
-    |sameApp|
+    ( index == 0 ) ifTrue: [ ^ nil ].
 
-    sameApp := aBuilder application == aBuilder window topView application.
-
-    "/ If I am opened as subcanvas in another application
-    "/ then treat this like a regular open.
-    "/ otherwise ignore it.
-    sameApp ifFalse:[
-        self postBuildWith:aBuilder.
-    ]
-
-    "Modified: / 8.7.1998 / 18:28:55 / cg"
+    ^ 4 - index.
 !
 
-postBuildWith:aBuilder
-    "this is sent after an interface is built from a spec.
-     Can be redefined in subclasses for additional setup after
-     the view has been built, but not yet opened."
-!
-
-postOpenWith:aBuilder
-    "this is sent after the applications main window is opened.
-     Can be redefined in subclasses for actions after opening the view."
-
-
-!
-
-preBuildAsSubcanvasWith:aBuilder
-    "this is sent before an interface is built from a spec as a subcanvas.
-     Can be redefined for apps which need to be informed about that."
-
-    "Modified: / 8.7.1998 / 18:29:34 / cg"
-!
-
-preBuildWith:aBuilder
-    "this is sent before an interface is built from a spec.
-     Can be redefined in subclasses.
-     mhmh - what should this do here ?"
-! !
-
-!ApplicationModel methodsFor:'private'!
-
-builderClass
-    "return the UIBuilder class for me.
-     This method can be redefined if (eventually) there are
-     spec readers for other UI languages (motif UIL ?)"
-
-    ^ UIBuilder
+length
 
-    "Created: / 19.6.1998 / 01:39:26 / cg"
-    "Modified: / 19.6.1998 / 01:45:24 / cg"
-!
-
-createBuilder
-    builder isNil ifTrue:[
-        builder := self builderClass new.
-        builder application:self.
-    ]
-
-    "Created: / 19.6.1998 / 03:32:37 / cg"
-!
-
-opened:whichTopView
-    "the topView has been opened.
-     This is sent by my topView when its really open
-     (i.e. finally visible)"
+    "Not in the header, but we're able to calculate it. ;-)"
+    "Calculation is not absolute precise, because instead of filesize we should"
+    "calculate with the size of the used data without any headers and ID3-tags."
+    "The lack of precision is about one second."
 
-    self addTopViewsToCurrentProject.
-    self postOpenWith:builder
-
-!
-
-selfResponsibleFor:aKey
-    ^ (aKey isNil or:[masterApplication isNil or:[self respondsTo:aKey]])
-! !
+    | time |
+    time := Time fromSeconds: ( 8 * filesize / ( self bitrate * 1000 ) ) asInteger.
 
-!ApplicationModel methodsFor:'queries'!
-
-defaultWindowType
-    "Applications come up non-modal, by default"
-
-    ^ #normal
-
-    "Created: 17.1.1997 / 19:57:34 / cg"
+    ^ ( ( time minutes printString ) leftPaddedTo: 2 with: $ ) , ':', ( ( time seconds printString ) paddedTo:2 with: $0 ).
 !
 
-graphicsDevice
-    "return the device I want to open my views on.
-     The default (if not created with #onDevice:) is the currently
-     active screen."
-
-    ^ device
-
-    "Created: 5.7.1996 / 17:51:31 / cg"
-!
-
-interfaceSpecFor:aSelector
-    "return an interface spec.
-     Here, the query is forwarded to my class.
-     Can be refefined in subclasses which want to provide per-instance specs."
-
-    ^ self class interfaceSpecFor:aSelector
-
-    "Created: / 25.1.1998 / 19:45:12 / cg"
-    "Modified: / 25.1.1998 / 19:47:09 / cg"
-!
-
-processName
-    "return a name to be shown for me in the process monitor"
-
-    self class == ApplicationModel ifTrue:[
-        ^ 'Application'
-    ].
-    ^ self class nameWithoutPrefix
-
-    "Modified: / 4.12.1997 / 12:39:14 / cg"
-!
-
-resolveClassNamed:something inClass:aClass
-    "return the class from something, a class, symbol, string or nil.
-     first we are looking in the namespace of the application, than of the
-     current namespace and than in Smalltalk
-    "
-
-    ^ Smalltalk resolveName:something inClass:aClass.
-!
+mode
 
-resolveName:something
-    "return the class from something, a class, symbol, string or nil.
-     first we are looking in the namespace of the application, than of the
-     current namespace and than in Smalltalk
-    "
-    ^ self resolveName:something inClass:self class
-!
-
-resolveName:something inClass:aClass
-    "return the class from something, a class, symbol, string or nil.
-     first we are looking in the namespace of the application, than of the
-     current namespace and than in Smalltalk
-    "
-    |cls|
-
-    aClass notNil ifTrue:[
-        (cls := Smalltalk resolveName:something inClass:aClass) notNil ifTrue:[
-            ^ cls
-        ].
+    "/ Original table from a MP3 documentation:
+    "/
+    "/    Bit 24  Bit 25  Dezimal  Mode
+    "/    0       0       0        Stereo
+    "/    0       1       1        Joint-Stereo
+    "/    1       0       2        Dual-Channel
+    "/    1       1       3        Mono
 
-        masterApplication notNil ifTrue:[
-            ^ masterApplication resolveName:something
-        ]
-    ].
-    ^ nil
-!
-
-topApplication
-    "return the top-master application"
+    | index |
+    index := 1 + ( ( long copy bitAnd: 2r00000000000000000000000011000000 ) >> ( 32 - 26 ) ).
 
-    masterApplication isNil ifTrue:[
-        ^ self
-    ].
-    ^ masterApplication topApplication
-
-    "Created: / 6.6.1998 / 19:40:42 / cg"
-! !
-
-!ApplicationModel methodsFor:'startup / release'!
-
-applicationWindowClass
-    ^ ApplicationWindow
+    ^ #( #Stereo #'Joint-Stereo' #'Dual-Channel' #Mono ) at: index.
 !
 
-close
-    "this is sent by my topView when about to be closed
-     by the program (not by the windowManager).
-     Notice, that we get a closeRequest message if closed by the windowManager,
-     which can be rejected by the app (or confirmed via a dialog)
-     Could be redefined in subclasses."
-
-    self closeDownViews
-!
-
-closeDownViews
-    "close down the applications view(s)"
-
-    |wg wgProcess views|
-
-    self release.
-    ActiveHelp stopFor:self.
-
-    (wg := self windowGroup) notNil ifTrue:[
-        wgProcess := wg process.
-        (Processor activeProcess ~~ wgProcess
-        and:[wgProcess notNil]) ifTrue:[
-            wgProcess terminate
-        ] ifFalse:[
-            wg closeDownViews.
-        ]
-    ]
-!
-
-closeRequest
-    "this is sent by my topView when about to be closed by the windowManager.
-     Could be redefined in subclasses to suppress close or confirm."
-
-    |sav|
+originalHome
 
-    (self window isNil
-    or:[self window isTopView not]) ifTrue:[
-        'ApplicationModel [warning]: oops - closeRequest for non-TopView arrived' infoPrintCR.
-        ^ self
-    ].
-
-    "/ In multiView apps, tell my master.
-    "/ (but not if I am a modal reincarnation)
-    (masterApplication notNil 
-    and:[self window isModal not]) ifTrue:[
-
-        "/ temporary clear my masterApplication to prevent
-        "/ endless recursion, in case the master sends me
-        "/ a closeRequest (although, it is supposed to
-        "/ send me a closeDownViews ...)
-
-        sav := masterApplication.
-        masterApplication := nil.
-        sav closeRequestFor:(self window).
-
-        "/ restore - in case master did not want me to close ...
-        masterApplication := sav.
-    ] ifFalse:[
-        "/ ST/X does close-check by redefining this message without
-        "/ a supersend;
-        "/ VW does it by returning false from requestForWindowClose
-        "/ sigh.
-
-        self requestForWindowClose ifTrue:[
-            self closeDownViews
-        ]
-    ].
-
-    "Modified: / 19.6.1998 / 01:37:17 / cg"
+    ^ ( long bitAt: ( 32 - 29 ) ) == 1.
 !
 
-closeRequestFor:aTopView
-    "this is sent by any of my topViews when about to be closed by the
-     windowmanager. For backward compatibility with single-view applications,
-     this is forwarded here to a simple (non topView-specific) closeRequest,
-     effectively closing all of my views.
-     MultiView applications should redefine this method if closing of individual
-     views closing is to be caught and/or should not close all of them."
-
-    |sav|
-
-    "/ In multiView apps, tell my master.
-    "/ (but not if I am a modal reincarnation)
-    (masterApplication notNil 
-    and:[self window isModal not]) ifTrue:[
+padding
 
-        "/ temporary clear my masterApplication to prevent
-        "/ endless recursion, in case the master sends me
-        "/ a closeRequest (although, it is supposed to
-        "/ send me a closeDownViews ...)
-
-        sav := masterApplication.
-        masterApplication := nil.
-        sav closeRequestFor:(self window).
-
-        "/ restore - in case master did not want me to close ...
-        masterApplication := sav.
-    ] ifFalse:[
-        self closeRequest
-    ]
+    ^ ( long bitAt: ( 32 - 22 ) ) == 1.
 !
 
-doAccept
-    "this is invoked by the Return-Key (if returnIsOK) or
-     the ok-button (if any), IFF the application has been
-     opened modal (i.e. as a dialog)."
+private
 
-    "/ the following is a bad kludge -
-    "/ actually, modal apps should inherit from SimpleDialog
-    "/ (then, things would be clean)
-    "/ However, it may be useful, to open some app (which is normally
-    "/ modeless) as a modal one as well.
-    "/ In that, case, we have no acceptHolder (see SimpleDialog),
-    "/ to remember the accept vs. cancel case.
-    "/
-    self window isModal ifTrue:[
-        "/ mhmh - is this a good idea ?
-        (self respondsTo:#accept) ifTrue:[
-            self accept
-        ] ifFalse:[
-            self closeRequest.
-        ].
-        ^ self
-    ].
-
-    ^ self      "/ nothing done here ...
+    ^ ( long bitAt: ( 32 - 23 ) ) == 1.
 !
 
-doCancel
-    "this is invoked by the Escape-Key (if escapeIsCancel) or
-     the cancel-button (if any), IFF the application has been
-     opened modal (i.e. as a dialog)."
+protection
 
-    "/ the following is a bad kludge -
-    "/ actually, modal apps should inherit from SimpleDialog
-    "/ (then, things would be clean)
-    "/ However, it may be useful, to open some app (which is normally
-    "/ modeless) as a modal one as well.
-    "/ In that, case, we have no acceptHolder (see SimpleDialog),
-    "/ to remember the accept vs. cancel case.
-    "/
-    self window isModal ifTrue:[
-        "/ mhmh - is this a good idea ?
-        (self respondsTo:#cancel) ifTrue:[
-            self cancel
-        ] ifFalse:[
-            self closeRequest.
-        ].
-        ^ self
-    ].
-    ^ self      "/ nothing done here ...
+    ^ ( long bitAt: ( 32 - 15 ) ) == 1.
 !
 
-releaseAsSubCanvas
-    "a subcanvas is closed or switching to a new application.
-     Can be redefined to perform a self release in this case."
-
-    "/ used to self release here,
-    "/ but that is incompatible to VW (RefactoryBrowser).
-    "/ Therefore, if you need it, you MUST now redefine
-    "/ this method.
-!
-
-restarted
-    "sent by my topWindow, when restarted from an image.
-     Nothing done here, but can be redefined to perform any actions
-     required to reset the application after an image-restart.
-     (for example: check if application files are still around, restart
-      subprocesses etc.)."
-
-    "Modified: 1.6.1996 / 16:55:50 / cg"
-!
-
-saveAndTerminateRequest
-    "some windowManagers send this to shut down an application
-     and have it save its state for restart.
-     Can be redefined in subclasses"
-
-    self closeRequest
-!
-
-saveAndTerminateRequestFor:aTopView
-    "some windowManagers send this to shut down an application
-     and have it save its state for restart.
-     Can be redefined in subclasses"
-
-    self saveAndTerminateRequest
-!
+samplingFrequency
 
-windowClass
-    "return the type of topWindow I would like to have created.
-     Can be redefined in subclasses to allow for specialized
-     subclass of ApplicationWindow to be returned here."
-
-    ^ ApplicationWindow
-! !
-
-!ApplicationModel methodsFor:'window events'!
-
-dispatchEvent:event
-    "dispatch a user-pushed event.
-     This allows for events for an appModel to be pushed into the event queue
-     the same way as events for a view are pushable."
-
-    ^ self 
-        dispatchEvent:event 
-        withFocusOn:nil
-        delegate:true
+    "/ Original table from a MP3 documentation:
+    "/
+    "/    Bit 20    Bit 21  Dezimal  MPEG 1    MPEG 2
+    "/    0         0       0        44100 Hz  22050 Hz
+    "/    0         1       1        48000 Hz  24000 Hz
+    "/    1         0       2        32000 Hz  16000 Hz
+    "/    1         1       3        -         -
 
-!
-
-dispatchEvent:evType arguments:evArgs withFocusOn:focusView delegate:doDelegate
-    "dispatch a user-pushed event.
-     This allows for events for an appModel to be pushed into the event queue
-     the same way as events for a view are pushable."
-
-    self perform:evType withArguments:evArgs
+    | index |
+    index := 1 + ( ( long copy bitAnd: 2r00000000000000000000110000000000 ) >> ( 32 - 22 ) ).
 
-    "Created: / 20.6.1998 / 16:36:54 / cg"
-    "Modified: / 20.6.1998 / 16:44:05 / cg"
-!
+    index := index + ( 4 * ( self version - 1 ) ).
 
-dispatchEvent:ev type:evType arguments:evArgs withFocusOn:focusView delegate:doDelegate
-    "dispatch a user-pushed event.
-     This allows for events for an appModel to be pushed into the event queue
-     the same way as events for a view are pushable."
-
-    self perform:evType withArguments:evArgs
-
-    "Created: / 20.6.1998 / 16:36:54 / cg"
-    "Modified: / 20.6.1998 / 16:44:05 / cg"
+    ^ #( 44100 22050 48000 nil
+         24000 32000 16000 nil ) at: index.
 !
 
-dispatchEvent:event withFocusOn:focusViewOrNil 
-    "dispatch a user-pushed event.
-     This allows for events for an appModel to be pushed into the event queue
-     the same way as events for a view are pushable."
-
-    ^ self 
-        dispatchEvent:event 
-        withFocusOn:focusViewOrNil
-        delegate:true
-
-
-!
-
-dispatchEvent:event withFocusOn:focusViewOrNil delegate:doDelegate
-    "dispatch a user-pushed event.
-     This allows for events for an appModel to be pushed into the event queue
-     the same way as events for a view are pushable."
-
-    ^ self 
-        dispatchEvent:event 
-        type:event type
-        arguments:(event arguments)
-        withFocusOn:focusViewOrNil
-        delegate:doDelegate
-
-
-!
-
-noticeOfWindowClose:aWindow
-    "sent when a topView has been closed.
-     Can be redefined in subclasses for cleanup."
-
-    ^ self
-
-    "Created: / 18.6.1998 / 18:56:31 / cg"
-    "Modified: / 18.6.1998 / 19:14:16 / cg"
-!
+version
 
-requestForWindowClose
-    "the applicationWindow wants to know, if a close
-     is ok. Return false if not."
-
-    |w k|
-
-    builder notNil ifTrue:[
-        (w := builder window) notNil ifTrue:[
-            (k := w keyboardProcessor) notNil ifTrue:[
-                ^ k requestForWindowClose
-            ]
-        ]
-    ].
-    ^ true
-
-    "Modified: / 18.6.1998 / 19:14:16 / cg"
-    "Created: / 19.6.1998 / 01:34:58 / cg"
-!
+    "/ Original table from a MP3 documentation:
+    "/
+    "/    Bit 12   MPEG Version
+    "/    0        MPEG 2
+    "/    1        MPEG 1
 
-showActivity:someMessage
-    "some activityNotification shalt be communicated to
-     the user. Forwarded from the topView and ignored here.
-     Can be redefined in concrete applications to show the
-     message either in some infoView (infoLabel as in Windows)
-     or in the title area (as done in the browsers)"
-
-    ^ self
-
-    "Created: 16.12.1995 / 18:41:04 / cg"
-    "Modified: 24.4.1996 / 09:34:22 / cg"
-!
-
-windowEvent:anEvent from:anApplicationWindow
-    "dummy: windowEvent forwarding is not yet implemented"
-
-    ^ self
-
-    "Modified: 24.4.1996 / 09:32:50 / cg"
+    ^ 2 - ( long bitAt: ( 32 - 12 ) ).
 ! !
 
-!ApplicationModel class methodsFor:'documentation'!
-
-version
-    ^ '$Header: /cvs/stx/stx/libview2/ApplicationModel.st,v 1.144 2000-09-29 10:18:07 cg Exp $'
-! !
-ApplicationModel initialize!