Add initial support for disassembly view
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 22 Jun 2018 20:10:16 +0100
changeset 77 163d914fae79
parent 76 4c97e72ece4e
child 78 5b61031de9a7
Add initial support for disassembly view
Make.proto
Make.spec
VDBAbstractPresenter.st
VDBFramePresenter.st
VDBInstructionListApplication.st
VDBInstructionPresenter.st
VDBInstructionsAndSourcePresenter.st
abbrev.stc
application/bc.mak
application/builder/package.deps.rake
bc.mak
jv_vdb.st
libInit.cc
--- a/Make.proto	Mon Jul 02 08:45:58 2018 +0200
+++ b/Make.proto	Fri Jun 22 20:10:16 2018 +0100
@@ -152,6 +152,8 @@
 $(OUTDIR)VDBEventLogApplication.$(O) VDBEventLogApplication.$(C) VDBEventLogApplication.$(H): VDBEventLogApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFramePresenter.$(O) VDBFramePresenter.$(C) VDBFramePresenter.$(H): VDBFramePresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionPresenter.$(O) VDBInstructionPresenter.$(C) VDBInstructionPresenter.$(H): VDBInstructionPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) VDBInstructionsAndSourcePresenter.$(C) VDBInstructionsAndSourcePresenter.$(H): VDBInstructionsAndSourcePresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBMemoryApplication.$(O) VDBMemoryApplication.$(C) VDBMemoryApplication.$(H): VDBMemoryApplication.st $(INCLUDE_TOP)/jv/libgdbs/GDBOutputFormats.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceApplication.$(O) VDBSourceApplication.$(C) VDBSourceApplication.$(H): VDBSourceApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBThreadGroupPresenter.$(O) VDBThreadGroupPresenter.$(C) VDBThreadGroupPresenter.$(H): VDBThreadGroupPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
@@ -163,6 +165,7 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR)
--- a/Make.spec	Mon Jul 02 08:45:58 2018 +0200
+++ b/Make.spec	Fri Jun 22 20:10:16 2018 +0100
@@ -69,6 +69,8 @@
 	VDBEventLogApplication \
 	VDBFrameApplication \
 	VDBFramePresenter \
+	VDBInstructionPresenter \
+	VDBInstructionsAndSourcePresenter \
 	VDBMemoryApplication \
 	VDBSourceApplication \
 	VDBThreadGroupPresenter \
@@ -80,6 +82,7 @@
 	VDBTabbingContainer \
 	VDBUnixDebuggerConsoleApplication \
 	VDBUnixInferiorConsoleApplication \
+	VDBInstructionListApplication \
 	VDBStackApplication \
 	VDBVariableObjectListApplication \
 
@@ -105,6 +108,8 @@
     $(OUTDIR)VDBEventLogApplication.$(O) \
     $(OUTDIR)VDBFrameApplication.$(O) \
     $(OUTDIR)VDBFramePresenter.$(O) \
+    $(OUTDIR)VDBInstructionPresenter.$(O) \
+    $(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) \
     $(OUTDIR)VDBMemoryApplication.$(O) \
     $(OUTDIR)VDBSourceApplication.$(O) \
     $(OUTDIR)VDBThreadGroupPresenter.$(O) \
@@ -116,6 +121,7 @@
     $(OUTDIR)VDBTabbingContainer.$(O) \
     $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
+    $(OUTDIR)VDBInstructionListApplication.$(O) \
     $(OUTDIR)VDBStackApplication.$(O) \
     $(OUTDIR)VDBVariableObjectListApplication.$(O) \
     $(OUTDIR)extensions.$(O) \
--- a/VDBAbstractPresenter.st	Mon Jul 02 08:45:58 2018 +0200
+++ b/VDBAbstractPresenter.st	Fri Jun 22 20:10:16 2018 +0100
@@ -178,6 +178,14 @@
     "Created: / 21-09-2014 / 23:53:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+isInstructionPresenter
+    ^ false
+!
+
+isInstructionsAndSourcePresenter
+    ^ false
+!
+
 isThreadGroupPresenter
     ^ false
 
--- a/VDBFramePresenter.st	Mon Jul 02 08:45:58 2018 +0200
+++ b/VDBFramePresenter.st	Fri Jun 22 20:10:16 2018 +0100
@@ -51,9 +51,15 @@
      #(Menu
         (
          (MenuItem
+            label: 'Disassemble'
+            itemValue: doDisassemble
+            isVisible: true
+          )
+         (MenuItem
             enabled: canCopyFunctionName
             label: 'Copy Function Name'
             itemValue: doCopyFunctionName
+            isVisible: true
           )
          )
         nil
@@ -105,6 +111,18 @@
     self doCopy: frame func.
 
     "Modified: / 16-01-2018 / 22:36:37 / jv"
+!
+
+doDisassemble
+    | disassembly |
+
+    disassembly := frame disassemble.
+    VDBInstructionListApplication new
+        debugger: frame debugger;
+        instructionList: disassembly;
+        open.
+
+    "Modified: / 22-06-2018 / 15:13:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBFramePresenter methodsFor:'menu-queries'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBInstructionListApplication.st	Fri Jun 22 20:10:16 2018 +0100
@@ -0,0 +1,178 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractTreeApplication subclass:#VDBInstructionListApplication
+	instanceVariableNames:'instructionListHolder selectedInstructionHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-UI-Others'
+!
+
+!VDBInstructionListApplication class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBInstructionListApplication class methodsFor:'accessing'!
+
+windowTitle
+    ^ self resources string: 'Assembly'
+
+    "Created: / 22-06-2018 / 12:25:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionListApplication methodsFor:'accessing'!
+
+instructionList: aCollection
+    self instructionListHolder value: aCollection
+
+    "Created: / 22-06-2018 / 12:48:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionListApplication methodsFor:'aspects'!
+
+instructionListHolder
+    "return/create the 'instructionListHolder' value holder (automatically generated)"
+
+    instructionListHolder isNil ifTrue:[
+        instructionListHolder := ValueHolder new.
+        instructionListHolder addDependent:self.
+    ].
+    ^ instructionListHolder
+!
+
+instructionListHolder:valueModel
+    "set the 'instructionListHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    instructionListHolder notNil ifTrue:[
+        oldValue := instructionListHolder value.
+        instructionListHolder removeDependent:self.
+    ].
+    instructionListHolder := valueModel.
+    instructionListHolder notNil ifTrue:[
+        instructionListHolder addDependent:self.
+    ].
+    newValue := instructionListHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:instructionListHolder.
+    ].
+!
+
+selectedInstructionHolder
+    "return/create the 'selectedInstructionHolder' value holder (automatically generated)"
+
+    selectedInstructionHolder isNil ifTrue:[
+        selectedInstructionHolder := ValueHolder new.
+        selectedInstructionHolder addDependent:self.
+    ].
+    ^ selectedInstructionHolder
+!
+
+selectedInstructionHolder:valueModel
+    "set the 'selectedInstructionHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    selectedInstructionHolder notNil ifTrue:[
+        oldValue := selectedInstructionHolder value.
+        selectedInstructionHolder removeDependent:self.
+    ].
+    selectedInstructionHolder := valueModel.
+    selectedInstructionHolder notNil ifTrue:[
+        selectedInstructionHolder addDependent:self.
+    ].
+    newValue := selectedInstructionHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:selectedInstructionHolder.
+    ].
+! !
+
+!VDBInstructionListApplication methodsFor:'change & update'!
+
+update:aspect with:param from:sender
+    "Invoked when an object that I depend upon sends a change notification."
+
+    sender == instructionListHolder ifTrue:[ 
+         self enqueueDelayedUpdateInternalList.
+         ^ self.
+    ].
+    super update:aspect with:param from:sender
+
+    "Modified: / 22-06-2018 / 12:38:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionListApplication methodsFor:'change & update-delayed'!
+
+delayedUpdateInternalList
+    | root |
+
+    root := self internalListHolder root.
+    root children:
+        (self instructionListHolder value collect:[:model | 
+            (model isKindOf: GDBInstructionsAndSourceLine) ifTrue:[
+                (VDBInstructionsAndSourcePresenter new) setInstructionsAndSource: model;
+                    parent:root;
+                    yourself
+            ] ifFalse:[ 
+                (VDBInstructionPresenter new) setInstruction: model;
+                    parent:root;
+                    yourself
+            ].
+        ]).
+    root expand.
+    root children do:[:each | each expand ].
+    internalListView notNil ifTrue:[
+        internalListView invalidate.
+    ]
+
+    "Created: / 27-02-2015 / 15:47:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-06-2018 / 17:19:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+delayedUpdateSelection
+    | internalSelection |
+
+    internalSelection := self internalSelectionHolder value.
+    internalSelection notNil ifTrue:[
+        self selectedInstructionHolder value: internalSelection instruction
+    ] ifFalse:[ 
+        self selectedInstructionHolder value: nil
+    ].
+
+    "Modified: / 22-06-2018 / 15:08:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionListApplication methodsFor:'queries'!
+
+canSelect: anItem
+    ^ anItem isInstructionPresenter
+
+    "Created: / 22-06-2018 / 15:07:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionListApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBInstructionPresenter.st	Fri Jun 22 20:10:16 2018 +0100
@@ -0,0 +1,68 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractPresenter subclass:#VDBInstructionPresenter
+	instanceVariableNames:'instruction'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-Presentation'
+!
+
+!VDBInstructionPresenter class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBInstructionPresenter methodsFor:'accessing'!
+
+instruction
+    ^ instruction
+!
+
+subject
+    "Return an instance of GDB object that this presenter displays."
+
+    ^ instruction
+
+    "Created: / 22-06-2018 / 15:10:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionPresenter methodsFor:'initialization'!
+
+setInstruction: aGDBInstruction
+    instruction := aGDBInstruction
+
+    "Created: / 22-06-2018 / 12:19:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionPresenter methodsFor:'protocol-accessing'!
+
+label
+    ^ instruction address , '  ', instruction assembly.
+
+    "Created: / 22-06-2018 / 12:21:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionPresenter methodsFor:'testing'!
+
+isInstructionPresenter
+    ^ true
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBInstructionsAndSourcePresenter.st	Fri Jun 22 20:10:16 2018 +0100
@@ -0,0 +1,86 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractPresenter subclass:#VDBInstructionsAndSourcePresenter
+	instanceVariableNames:'instructionsAndSource'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-Presentation'
+!
+
+!VDBInstructionsAndSourcePresenter class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBInstructionsAndSourcePresenter methodsFor:'accessing'!
+
+subject
+    "Return an instance of GDB object that this presenter displays."
+
+    ^ instructionsAndSource
+
+    "Created: / 22-06-2018 / 15:10:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionsAndSourcePresenter methodsFor:'initialization'!
+
+setInstructionsAndSource: aGDBInstructionsAndSourceLine
+    instructionsAndSource := aGDBInstructionsAndSourceLine
+
+    "Created: / 22-06-2018 / 12:40:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionsAndSourcePresenter methodsFor:'protocol-accessing'!
+
+fetchChildren
+    ^ instructionsAndSource instructions collect:[ :i | VDBInstructionPresenter new setInstruction: i; parent: self ]
+
+    "Created: / 22-06-2018 / 12:19:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    ^ instructionsAndSource file, ':  ', instructionsAndSource line printString
+
+    "Created: / 22-06-2018 / 12:22:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionsAndSourcePresenter methodsFor:'protocol-displaying'!
+
+displayLabel:aLabel h:lH on:aGC x:x y:y h:h isHighlightedAsSelected:isHighlightedAsSelected
+    | color |
+
+    color := aGC paint.
+    aGC paint: Color gray.
+    [
+       super displayLabel:aLabel h:lH on:aGC x:x y:y h:h isHighlightedAsSelected:isHighlightedAsSelected
+    ] ensure:[ 
+        aGC paint: color.
+    ].
+
+    "Created: / 22-06-2018 / 15:12:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBInstructionsAndSourcePresenter methodsFor:'testing'!
+
+isInstructionsAndSourcePresenter
+    ^ true
+! !
+
--- a/abbrev.stc	Mon Jul 02 08:45:58 2018 +0200
+++ b/abbrev.stc	Fri Jun 22 20:10:16 2018 +0100
@@ -19,6 +19,8 @@
 VDBEventLogApplication VDBEventLogApplication jv:vdb 'VDB-UI-Events' 2
 VDBFrameApplication VDBFrameApplication jv:vdb 'VDB-UI-Others' 2
 VDBFramePresenter VDBFramePresenter jv:vdb 'VDB-Presentation' 0
+VDBInstructionPresenter VDBInstructionPresenter jv:vdb 'VDB-Presentation' 0
+VDBInstructionsAndSourcePresenter VDBInstructionsAndSourcePresenter jv:vdb 'VDB-Presentation' 0
 VDBMemoryApplication VDBMemoryApplication jv:vdb 'VDB-UI-Others' 2
 VDBSourceApplication VDBSourceApplication jv:vdb 'VDB-UI-Source' 2
 VDBThreadGroupPresenter VDBThreadGroupPresenter jv:vdb 'VDB-Presentation' 0
@@ -30,5 +32,6 @@
 VDBTabbingContainer VDBTabbingContainer jv:vdb 'VDB-UI-Containers' 2
 VDBUnixDebuggerConsoleApplication VDBUnixDebuggerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBUnixInferiorConsoleApplication VDBUnixInferiorConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
+VDBInstructionListApplication VDBInstructionListApplication jv:vdb 'VDB-UI-Others' 2
 VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
 VDBVariableObjectListApplication VDBVariableObjectListApplication jv:vdb 'VDB-UI-Others' 2
--- a/application/bc.mak	Mon Jul 02 08:45:58 2018 +0200
+++ b/application/bc.mak	Fri Jun 22 20:10:16 2018 +0100
@@ -215,8 +215,7 @@
 stx_RESOURCES: \
 	keyboard.rc \
 	keyboardMacros.rc \
-	host.rc \
-	h_win32.rc \
+	host.rc \        
 	display.rc \
 	d_win32.rc \
 	libbasic_RESOURCES \
@@ -234,9 +233,6 @@
 host.rc: $(TOP)\projects\smalltalk\host.rc
 	copy $(TOP)\projects\smalltalk\host.rc *.*
 
-h_win32.rc: $(TOP)\projects\smalltalk\h_win32.rc
-	copy $(TOP)\projects\smalltalk\h_win32.rc *.*
-
 display.rc: $(TOP)\projects\smalltalk\display.rc
 	copy $(TOP)\projects\smalltalk\display.rc *.*
 
--- a/application/builder/package.deps.rake	Mon Jul 02 08:45:58 2018 +0200
+++ b/application/builder/package.deps.rake	Fri Jun 22 20:10:16 2018 +0100
@@ -8,6 +8,7 @@
 
 task "jv:vdb" => "jv:libgdbs"
 task "jv:vdb" => "stx:libbasic"
+task "jv:vdb" => "stx:libtool"
 task "jv:vdb" => "stx:libview"
 task "jv:vdb" => "stx:libview2"
 task "jv:vdb" => "stx:libwidg"
--- a/bc.mak	Mon Jul 02 08:45:58 2018 +0200
+++ b/bc.mak	Fri Jun 22 20:10:16 2018 +0100
@@ -99,6 +99,8 @@
 $(OUTDIR)VDBEventLogApplication.$(O) VDBEventLogApplication.$(C) VDBEventLogApplication.$(H): VDBEventLogApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFramePresenter.$(O) VDBFramePresenter.$(C) VDBFramePresenter.$(H): VDBFramePresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionPresenter.$(O) VDBInstructionPresenter.$(C) VDBInstructionPresenter.$(H): VDBInstructionPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) VDBInstructionsAndSourcePresenter.$(C) VDBInstructionsAndSourcePresenter.$(H): VDBInstructionsAndSourcePresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBMemoryApplication.$(O) VDBMemoryApplication.$(C) VDBMemoryApplication.$(H): VDBMemoryApplication.st $(INCLUDE_TOP)\jv\libgdbs\GDBOutputFormats.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceApplication.$(O) VDBSourceApplication.$(C) VDBSourceApplication.$(H): VDBSourceApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBThreadGroupPresenter.$(O) VDBThreadGroupPresenter.$(C) VDBThreadGroupPresenter.$(H): VDBThreadGroupPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
@@ -110,6 +112,7 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR)
--- a/jv_vdb.st	Mon Jul 02 08:45:58 2018 +0200
+++ b/jv_vdb.st	Fri Jun 22 20:10:16 2018 +0100
@@ -117,6 +117,8 @@
         VDBEventLogApplication
         VDBFrameApplication
         VDBFramePresenter
+        VDBInstructionPresenter
+        VDBInstructionsAndSourcePresenter
         VDBMemoryApplication
         VDBSourceApplication
         VDBThreadGroupPresenter
@@ -128,6 +130,7 @@
         VDBTabbingContainer
         VDBUnixDebuggerConsoleApplication
         VDBUnixInferiorConsoleApplication
+        VDBInstructionListApplication
         VDBStackApplication
         VDBVariableObjectListApplication
     )
--- a/libInit.cc	Mon Jul 02 08:45:58 2018 +0200
+++ b/libInit.cc	Fri Jun 22 20:10:16 2018 +0100
@@ -34,6 +34,8 @@
 extern void _VDBEventLogApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFramePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBInstructionPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBInstructionsAndSourcePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBMemoryApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBSourceApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBThreadGroupPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -45,6 +47,7 @@
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBVariableObjectListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 
@@ -79,6 +82,8 @@
     _VDBEventLogApplication_Init(pass,__pRT__,snd);
     _VDBFrameApplication_Init(pass,__pRT__,snd);
     _VDBFramePresenter_Init(pass,__pRT__,snd);
+    _VDBInstructionPresenter_Init(pass,__pRT__,snd);
+    _VDBInstructionsAndSourcePresenter_Init(pass,__pRT__,snd);
     _VDBMemoryApplication_Init(pass,__pRT__,snd);
     _VDBSourceApplication_Init(pass,__pRT__,snd);
     _VDBThreadGroupPresenter_Init(pass,__pRT__,snd);
@@ -90,6 +95,7 @@
     _VDBTabbingContainer_Init(pass,__pRT__,snd);
     _VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
+    _VDBInstructionListApplication_Init(pass,__pRT__,snd);
     _VDBStackApplication_Init(pass,__pRT__,snd);
     _VDBVariableObjectListApplication_Init(pass,__pRT__,snd);