/* test.oop

   A thoroughly useless example of dynamic classes.  This
	 is just a template for what goes on.  Figure out what's
	 happening on your own by changing various method
	 definitions (for example: try having cTEST2 *not*
	 replace cTEST::RunTest:
	 
	 What will happen should be exactly what you think will
	 happen.

	 Copyright (c) Dan Ramage 2000
	 Last update: Jan 17, 2000
*/


PROC Init:
	main:
ENDP

// Make sure object.oop in the next line is the full path
// to object.oop if your program doesn't compile properly
#include <object.oop>

CLASS cTEST : cOBJECT
	PROC
		cTEST:
		_cTEST:
		HiddenTest:
		RunTest:
	ENDP
	DATA
	ENDD
ENDC

PROC cTEST::cTEST:
	PRINT "cTEST::cTEST:, "; ME@
	PRINT ""
ENDP

PROC cTEST::_cTEST:
	PRINT "cTEST::_cTEST:, "; ME@
	PRINT ""
ENDP

PROC cTEST::RunTest:
	PRINT "cTEST::RunTest:, "; ME@
	cOBJECT::Dump:(me@->root@)
	PRINT ""
ENDP

PROC cTEST::HiddenTest:
	PRINT "cTEST::HiddenTest:, "; ME@
	PRINT ""
ENDP


CLASS cTEST2 : cTEST
	PROC
		cTEST2:
		_cTEST2:
		RunTest:
		FunTest%:
	ENDP
ENDC

PROC cTEST2::cTEST2:
	PRINT "cTEST2::cTEST2:, "; ME@
	PRINT ""
ENDP

PROC cTEST2::_cTEST2:
	PRINT "cTEST2::_cTEST2:, "; ME@
	PRINT ""
ENDP

PROC cTEST2::RunTest:
	PRINT "cTEST2::RunTest:, "; ME@

	cTEST::RunTest:(me@->super_ctest@)
	me@.HiddenTest:
	gIPRINT GEN$(me@.FunTest%:,2)+" "+GEN$(me@->super_ctest@->super_cobject@->mCount%,2)

	PRINT ""
ENDP

PROC cTEST2::FunTest%:
	PRINT "cTEST2::FunTest%:, "; ME@
	PRINT ""
	RETURN 2
ENDP


PROC main:
	LOCAL <cTEST2*>test@
	
	test@ = NEW cTEST2
	test@.RunTest:
	DESTROY test@
	
	GET
ENDP