Fixes for displaying local variables in debugger.
This commit fixes issue #36.
--- a/JavaContext.st Thu Oct 31 07:53:30 2013 -0300
+++ b/JavaContext.st Tue Nov 05 17:52:46 2013 +0000
@@ -334,6 +334,14 @@
"Modified: / 17-11-2011 / 19:13:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
+argsAndVars
+ "return an array filled with the arguments and variables of this context"
+
+ ^ self method originalMethodIfWrapped methodArgAndVarValuesInContext: self.
+
+ "Created: / 04-11-2013 / 18:45:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
methodFromClass
"Return the up-to-date method. Actyally, it fetches the method
from receiver's class"
--- a/JavaLocalVariableTable.st Thu Oct 31 07:53:30 2013 -0300
+++ b/JavaLocalVariableTable.st Tue Nov 05 17:52:46 2013 +0000
@@ -74,14 +74,15 @@
"/ not at this pc - but maybe the name is valid
"/ for all of the methods lines ...
- numEntryForSlot == 1 ifTrue:[
- ^ entryForSlot name
- ].
+"/ numEntryForSlot == 1 ifTrue:[
+"/ ^ entryForSlot name
+"/ ].
^ nil
- "Created: / 2.7.1996 / 11:30:09 / cg"
- "Modified: / 8.1.1998 / 18:56:20 / cg"
+ "Created: / 02-07-1996 / 11:30:09 / cg"
+ "Modified: / 08-01-1998 / 18:56:20 / cg"
+ "Modified: / 05-11-2013 / 16:36:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaLocalVariableTable class methodsFor:'documentation'!
--- a/JavaMethod.st Thu Oct 31 07:53:30 2013 -0300
+++ b/JavaMethod.st Tue Nov 05 17:52:46 2013 +0000
@@ -1105,17 +1105,71 @@
!
methodArgAndVarNamesInContext: context
- | pc |
+ | pc stop |
+
+ self isNative ifTrue:[
+ ^ self methodArgNames
+ ].
+
+ context isJavaContext ifTrue:[
+ pc := context pc.
+ ] ifFalse:[
+ "/ It may happen that the context for Java method is not
+ "/ a JavaContext. This is true for some code-saver functions
+ "/ such as __retInst1(), __retSelf1() and so on. In that case,
+ "/ method sould be simple enough to have no nested scopes
+ "/ or local variables. Forcing pc := 0 therefore works fine
+ pc := 0.
+ ].
localVariableTable isNil ifTrue:[^self methodArgNames , self methodVarNames ].
- pc := context pc.
-
- ^(1 to: self numArgs + self numVars) collect:[:i|
+
+ stop := context arg1Index - 1 + self numArgs + self numVars.
+ stop := stop min: context size.
+
+ ^(1 to: stop) collect:[:i|
(localVariableTable nameForSlot: i - 1 atPC: pc) ? '<inaccessible>'.
].
"Created: / 18-12-2012 / 18:17:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 08-10-2013 / 12:02:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-11-2013 / 17:28:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+methodArgAndVarValuesInContext: context
+ | pc stop |
+
+ localVariableTable isNil ifTrue:[
+ | values |
+
+ values := Array new: context size.
+ values replaceFrom: 1 count: context size with: context startingAt: 1.
+ ^ values.
+ ].
+ context isJavaContext ifTrue:[
+ pc := context pc.
+ ] ifFalse:[
+ "/ It may happen that the context for Java method is not
+ "/ a JavaContext. This is true for some code-saver functions
+ "/ such as __retInst1(), __retSelf1() and so on. In that case,
+ "/ method sould be simple enough to have no nested scopes
+ "/ or local variables. Forcing pc := 0 therefore works fine
+ pc := 0.
+ ].
+
+ stop := context arg1Index - 1 + self numArgs + self numVars.
+ stop := stop min: context size.
+
+
+ ^(1 to: stop) collect:[:i|
+ (localVariableTable nameForSlot: i - 1 atPC: pc) notNil ifTrue:[
+ context at: i
+ ] ifFalse:[
+ nil
+ ].
+ ].
+
+ "Created: / 04-11-2013 / 18:53:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-11-2013 / 17:28:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
methodArgNames
@@ -2415,10 +2469,11 @@
!
isWrapped
- ^ self isBreakpointed
-
- "Modified: / 11.1.1998 / 13:28:43 / cg"
- "Created: / 11.1.1998 / 13:38:04 / cg"
+ ^ super isWrapped
+"/ ^ self isBreakpointed
+
+ "Created: / 11-01-1998 / 13:38:04 / cg"
+ "Modified: / 05-11-2013 / 16:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
lineNumberForPC0: pc
--- a/Make.proto Thu Oct 31 07:53:30 2013 -0300
+++ b/Make.proto Tue Nov 05 17:52:46 2013 +0000
@@ -21,7 +21,7 @@
INCLUDE_TOP=$(TOP)/..
# subdirectories where targets are to be made:
-SUBDIRS= experiments libs tools
+SUBDIRS= experiments tools
# subdirectories where Makefiles are to be made:
@@ -34,7 +34,7 @@
# add the path(es) here:,
# ********** OPTIONAL: MODIFY the next lines ***
# LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES=-I$(ZLIB_DIR) -Isupport/fdlibm -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libview
+LOCALINCLUDES=-I$(ZLIB_DIR) -Isupport/fdlibm -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic3 -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libview
# if you need any additional defines for embedded C code,
@@ -144,8 +144,6 @@
cd ../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd ../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd ../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
- cd ../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
- cd ../goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
--- a/abbrev.stc Thu Oct 31 07:53:30 2013 -0300
+++ b/abbrev.stc Tue Nov 05 17:52:46 2013 +0000
@@ -21,7 +21,7 @@
JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 1
JavaClassQuery JavaClassQuery stx:libjava 'Languages-Java-Classes' 1
JavaClassReaderTests JavaClassReaderTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
-JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
JavaClassReloader JavaClassReloader stx:libjava 'Languages-Java-Support' 0
JavaCodeLibraryOrBundle JavaCodeLibraryOrBundle stx:libjava 'Languages-Java-Support-Libraries' 0
JavaCompiler_Eclipse JavaCompiler_Eclipse stx:libjava 'Languages-Java-Tools-Eclipse' 0
@@ -32,32 +32,33 @@
JavaDescriptor JavaDescriptor stx:libjava 'Languages-Java-Support' 0
JavaError JavaError stx:libjava 'Languages-Java-Support' 1
JavaExceptionTable JavaExceptionTable stx:libjava 'Languages-Java-Support' 0
-JavaExceptionTests JavaExceptionTests stx:libjava 'Languages-Java-Tests' 1
+JavaExceptionTests JavaExceptionTests stx:libjava 'Languages-Java-Tests' 0
JavaField JavaField stx:libjava 'Languages-Java-Reader-Support' 0
-JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
JavaFinalizationRegistry JavaFinalizationRegistry stx:libjava 'Languages-Java-Support' 0
-JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 1
+JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 0
+JavaInitializedResource JavaInitializedResource stx:libjava 'Languages-Java-Tests' 0
JavaInnerClasses JavaInnerClasses stx:libjava 'Languages-Java-Support' 0
-JavaInterfaceMethodRefTests JavaInterfaceMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
-JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests-Libraries' 1
+JavaInterfaceMethodRefTests JavaInterfaceMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests-Libraries' 0
JavaLanguage JavaLanguage stx:libjava 'Languages-Java-Support' 1
JavaLibraries JavaLibraries stx:libjava 'Languages-Java-Support' 0
-JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 1
+JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 0
JavaLocalVariableTable JavaLocalVariableTable stx:libjava 'Languages-Java-Support' 0
JavaLocalVariableTableEntry JavaLocalVariableTableEntry stx:libjava 'Languages-Java-Support' 0
JavaLookup JavaLookup stx:libjava 'Languages-Java-Interop' 0
-JavaLookupResolutionAlgorithmTests JavaLookupResolutionAlgorithmTests stx:libjava 'Languages-Java-Tests-Interop' 1
-JavaLookupTests JavaLookupTests stx:libjava 'Languages-Java-Tests-Interop' 1
-JavaLookupTestsResource JavaLookupTestsResource stx:libjava 'Languages-Java-Tests-Interop' 3
+JavaLookupResolutionAlgorithmTests JavaLookupResolutionAlgorithmTests stx:libjava 'Languages-Java-Tests-Interop' 0
+JavaLookupTests JavaLookupTests stx:libjava 'Languages-Java-Tests-Interop' 0
+JavaLookupTestsResource JavaLookupTestsResource stx:libjava 'Languages-Java-Tests-Interop' 0
JavaMathSupport JavaMathSupport stx:libjava 'Languages-Java-Support-Native' 0
JavaMetaclass JavaMetaclass stx:libjava 'Languages-Java-Classes' 0
-JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
JavaMirror JavaMirror stx:libjava 'Languages-Java-Classes' 0
JavaMonitor JavaMonitor stx:libjava 'Languages-Java-Support' 0
-JavaMonitorsTests JavaMonitorsTests stx:libjava 'Languages-Java-Tests' 1
+JavaMonitorsTests JavaMonitorsTests stx:libjava 'Languages-Java-Tests' 0
JavaNameAndType2 JavaNameAndType2 stx:libjava 'Languages-Java-Reader-Support-new' 0
JavaNativeMemory JavaNativeMemory stx:libjava 'Languages-Java-Support' 0
-JavaNativeMemoryTests JavaNativeMemoryTests stx:libjava 'Languages-Java-Tests' 1
+JavaNativeMemoryTests JavaNativeMemoryTests stx:libjava 'Languages-Java-Tests' 0
JavaNioSupport JavaNioSupport stx:libjava 'Languages-Java-Support-Native' 0
JavaObject JavaObject stx:libjava 'Languages-Java-Classes' 0
JavaObjectDictionary JavaObjectDictionary stx:libjava 'Languages-Java-Support' 0
@@ -68,7 +69,7 @@
JavaRefMock JavaRefMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
JavaRefsAndConstantPoolTestCase JavaRefsAndConstantPoolTestCase stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
JavaResolver JavaResolver stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
JavaShort JavaShort stx:libjava 'Languages-Java-Support' 0
JavaSlotIndexCache JavaSlotIndexCache stx:libjava 'Languages-Java-Support' 0
JavaSocket JavaSocket stx:libjava 'Languages-Java-Support' 0
@@ -76,8 +77,9 @@
JavaSourceFileWriter JavaSourceFileWriter stx:libjava 'Languages-Java-Support' 0
JavaTestCaseProxy JavaTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
JavaTestsLoader JavaTestsLoader stx:libjava 'Languages-Java-Tests' 0
+JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 0
JavaTopView JavaTopView stx:libjava 'Languages-Java-Views-Support' 2
-JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 1
+JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 0
JavaUnresolvedCompilationError JavaUnresolvedCompilationError stx:libjava 'Languages-Java-Support' 1
JavaUnresolvedConstant JavaUnresolvedConstant stx:libjava 'Languages-Java-Reader-Support' 0
JavaUtilities JavaUtilities stx:libjava 'Languages-Java-Utilities' 0
@@ -89,7 +91,7 @@
ProxyMethodNode ProxyMethodNode stx:libjava 'System-Compiler-Interop' 0
SmalltalkAppletContext SmalltalkAppletContext stx:libjava 'Languages-Java-Views-Support' 0
SmalltalkAppletStub SmalltalkAppletStub stx:libjava 'Languages-Java-Views-Support' 0
-TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
+TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 0
stx_libjava stx_libjava stx:libjava '* Projects & Packages *' 3
GroovyMetaclass GroovyMetaclass stx:libjava 'Languages-Groovy-Classes' 0
Java Java stx:libjava 'Languages-Java-Support' 0
@@ -113,7 +115,6 @@
JavaFieldAnnotationContainer JavaFieldAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
JavaFieldDescriptor JavaFieldDescriptor stx:libjava 'Languages-Java-Support' 0
JavaFieldDescriptorWithUnionType JavaFieldDescriptorWithUnionType stx:libjava 'Languages-Java-Support' 0
-JavaInitializedResource JavaInitializedResource stx:libjava 'Languages-Java-Tests' 2
JavaInvalidRefError JavaInvalidRefError stx:libjava 'Languages-Java-Support' 1
JavaMethod JavaMethod stx:libjava 'Languages-Java-Classes' 0
JavaMethodAnnotationContainer JavaMethodAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
@@ -121,7 +122,6 @@
JavaNativeMethodImpl_OpenJDK6 JavaNativeMethodImpl_OpenJDK6 stx:libjava 'Languages-Java-Support-OpenJDK6' 0
JavaRelease JavaRelease stx:libjava 'Languages-Java-Support' 1
JavaStringRef2 JavaStringRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 2
JavaUnhandledExceptionError JavaUnhandledExceptionError stx:libjava 'Languages-Java-Support' 1
JavaUnresolvedClassConstant JavaUnresolvedClassConstant stx:libjava 'Languages-Java-Reader-Support' 0
JavaUnresolvedStringConstant JavaUnresolvedStringConstant stx:libjava 'Languages-Java-Reader-Support' 0
--- a/bc.mak Thu Oct 31 07:53:30 2013 -0300
+++ b/bc.mak Tue Nov 05 17:52:46 2013 +0000
@@ -34,7 +34,7 @@
-LOCALINCLUDES=-I$(ZLIB_DIR) -Isupport\fdlibm -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libview
+LOCALINCLUDES=-I$(ZLIB_DIR) -Isupport\fdlibm -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic3 -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libview
LOCALDEFINES=
STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -varPrefix=$(LIBNAME)
@@ -54,8 +54,6 @@
pushd ..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\libbasic3 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
- pushd ..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
- pushd ..\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
--- a/bmake.bat Thu Oct 31 07:53:30 2013 -0300
+++ b/bmake.bat Tue Nov 05 17:52:46 2013 +0000
@@ -10,13 +10,6 @@
make.exe -N -f bc.mak %DEFINES% %*
@echo "***********************************"
-@echo "Buildung stx/libjava/libs
-@echo "***********************************"
-@cd libs
-@call bmake %1 %2
-@cd ..
-
-@echo "***********************************"
@echo "Buildung stx/libjava/tools
@echo "***********************************"
@cd tools
--- a/lccmake.bat Thu Oct 31 07:53:30 2013 -0300
+++ b/lccmake.bat Tue Nov 05 17:52:46 2013 +0000
@@ -6,13 +6,6 @@
make.exe -N -f bc.mak -DUSELCC=1 %*
@echo "***********************************"
-@echo "Buildung stx/libjava/libs
-@echo "***********************************"
-@cd libs
-@call lccmake %1 %2
-@cd ..
-
-@echo "***********************************"
@echo "Buildung stx/libjava/tools
@echo "***********************************"
@cd tools
--- a/libjava.rc Thu Oct 31 07:53:30 2013 -0300
+++ b/libjava.rc Tue Nov 05 17:52:46 2013 +0000
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\nCopyright Jan Vrany, Jan Kurs and Marcel Hlopko\n SWING Research Group, Czech Technical University In Prague\0"
VALUE "ProductName", "Smalltalk/X\0"
VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Thu, 17 Oct 2013 10:06:03 GMT\0"
+ VALUE "ProductDate", "Tue, 05 Nov 2013 13:48:49 GMT\0"
END
END
--- a/mingwmake.bat Thu Oct 31 07:53:30 2013 -0300
+++ b/mingwmake.bat Tue Nov 05 17:52:46 2013 +0000
@@ -14,13 +14,6 @@
make.exe -N -f bc.mak %DEFINES% %USEMINGW_ARG% %*
@echo "***********************************"
-@echo "Buildung stx/libjava/libs
-@echo "***********************************"
-@cd libs
-@call mingwmake %1 %2
-@cd ..
-
-@echo "***********************************"
@echo "Buildung stx/libjava/tools
@echo "***********************************"
@cd tools
--- a/stx_libjava.st Thu Oct 31 07:53:30 2013 -0300
+++ b/stx_libjava.st Tue Nov 05 17:52:46 2013 +0000
@@ -160,7 +160,6 @@
(the browser has a menu function for that)"
^ #(
- #'stx:goodies/sunit' "TestAsserter - superclass of JavaAntProjectResource "
#'stx:libbasic' "AbstractNumberVector - extended "
#'stx:libbasic2' "BitArray - extended "
#'stx:libbasic3' "WrappedMethod - extended "
@@ -177,6 +176,7 @@
exclude individual packages in the #excludedFromPreRequisites method."
^ #(
+ #'stx:goodies/sunit' "TestSuite - referenced by JavaTestsLoader class>>buildSuiteFrom: "
#'stx:libcomp' "BlockNode - referenced by JavaNativeMethod>>numberOfArgs: "
#'stx:libhtml' "URL - referenced by JavaEmbeddedFrameView>>setupAppletFrameIn:initializeJava: "
#'stx:libtool' "DebugView - referenced by Java class>>flushClasses "
@@ -194,7 +194,6 @@
^ #(
#'stx:libjava/experiments'
- #'stx:libjava/libs'
#'stx:libjava/tools'
)
! !
@@ -344,6 +343,7 @@
(JavaFieldRefTests autoload)
JavaFinalizationRegistry
(JavaFreshlyInitializedResource autoload)
+ (JavaInitializedResource autoload)
JavaInnerClasses
(JavaInterfaceMethodRefTests autoload)
(JavaJUnitTests autoload)
@@ -383,6 +383,7 @@
JavaSourceFileWriter
(JavaTestCaseProxy autoload)
JavaTestsLoader
+ (JavaTestsResource autoload)
JavaTopView
(JavaUTF8Tests autoload)
JavaUnresolvedCompilationError
@@ -420,7 +421,6 @@
JavaFieldAnnotationContainer
JavaFieldDescriptor
JavaFieldDescriptorWithUnionType
- (JavaInitializedResource autoload)
JavaInvalidRefError
JavaMethod
JavaMethodAnnotationContainer
@@ -428,7 +428,6 @@
#'JavaNativeMethodImpl_OpenJDK6'
JavaRelease
JavaStringRef2
- (JavaTestsResource autoload)
JavaUnhandledExceptionError
JavaUnresolvedClassConstant
JavaUnresolvedStringConstant
--- a/vcmake.bat Thu Oct 31 07:53:30 2013 -0300
+++ b/vcmake.bat Tue Nov 05 17:52:46 2013 +0000
@@ -18,13 +18,6 @@
@echo "***********************************"
-@echo "Buildung stx/libjava/libs
-@echo "***********************************"
-@cd libs
-@call vcmake %1 %2
-@cd ..
-
-@echo "***********************************"
@echo "Buildung stx/libjava/tools
@echo "***********************************"
@cd tools