/*
 * demonstration/test code for non virtual hidden messages
 *
 * Copyright 2006 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
 *
 */

#xtranslate QQOut([<x,...>]) => [OutStd(<x>)]
#xtranslate QOut([<x,...>]) => OutStd(hb_eol())[;OutStd(<x>)]

#include "hbclass.ch"

PROCEDURE Main()

   LOCAL o := myclass3():new()

   ? Date(), Time(), Version(), OS()
   ?

   o:m1()
   o:m2()
   o:m3()

   RETURN

CREATE CLASS myclass1
   hidden:
   var a init "(a1)"

   class var b init "(b1)"

   METHOD x
   protected:
   var c init "(c1)"
   class var d init "(d1)"
   METHOD y
   exported:
   var e init "(e1)"
   class var f init "(f1)"
   METHOD z
   METHOD m1

ENDCLASS

METHOD m1

   ? "Method: MYCLASS1:M1()"
   ? "   a =>", ::a, ",  should be: (a1)"
   ? "   b =>", ::b, ",  should be: (b1)"
   ? "   c =>", ::c, ",  should be: (c3)"
   ? "   d =>", ::d, ",  should be: (d3)"
   ? "   e =>", ::e, ",  should be: (e3)"
   ? "   f =>", ::f, ",  should be: (f3)"
   ? "   execute ::x(),  should be: MYCLASS1:X()"
   ::x()
   ? "   execute ::y(),  should be: MYCLASS3:Y()"
   ::y()
   ? "   execute ::z(),  should be: MYCLASS3:Z()"
   ::z()

   RETURN Self

METHOD x

   ? "   Method: MYCLASS1:X()"
   ? "      a =>", ::a, ",  should be: (a1)"
   ? "      b =>", ::b, ",  should be: (b1)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD y

   ? "   Method: MYCLASS1:Y()"
   ? "      a =>", ::a, ",  should be: (a1)"
   ? "      b =>", ::b, ",  should be: (b1)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD z

   ? "   Method: MYCLASS1:Z()"
   ? "      a =>", ::a, ",  should be: (a1)"
   ? "      b =>", ::b, ",  should be: (b1)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

   CREATE CLASS myclass2
   hidden:
   var a init "(a2)"

CLASS var b init "(b2)"

   METHOD x
   protected:
   var c init "(c2)"
   CLASS var d init "(d2)"
   METHOD y
   exported:
   var e init "(e2)"
   CLASS var f init "(f2)"
   METHOD z
   METHOD m2

ENDCLASS

METHOD m2

   ? "Method: MYCLASS2:M2()"
   ? "   a =>", ::a, ",  should be: (a2)"
   ? "   b =>", ::b, ",  should be: (b2)"
   ? "   c =>", ::c, ",  should be: (c3)"
   ? "   d =>", ::d, ",  should be: (d3)"
   ? "   e =>", ::e, ",  should be: (e3)"
   ? "   f =>", ::f, ",  should be: (f3)"
   ? "   execute ::x(),  should be: MYCLASS2:X()"
   ::x()
   ? "   execute ::y(),  should be: MYCLASS3:Y()"
   ::y()
   ? "   execute ::z(),  should be: MYCLASS3:Z()"
   ::z()

   RETURN Self

METHOD x

   ? "   Method: MYCLASS2:X()"
   ? "      a =>", ::a, ",  should be: (a2)"
   ? "      b =>", ::b, ",  should be: (b2)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD y

   ? "   Method: MYCLASS2:Y()"
   ? "      a =>", ::a, ",  should be: (a2)"
   ? "      b =>", ::b, ",  should be: (b2)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD z

   ? "   Method: MYCLASS2:Z()"
   ? "      a =>", ::a, ",  should be: (a2)"
   ? "      b =>", ::b, ",  should be: (b2)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

CREATE CLASS myclass3 FROM myclass1, myclass2
   hidden:
   var a init "(a3)"

   class var b init "(b3)"

   METHOD x
   protected:
   var c init "(c3)"
   class var d init "(d3)"
   METHOD y
   exported:
   var e init "(e3)"
   class var f init "(f3)"
   METHOD z
   METHOD m3

ENDCLASS

METHOD m3

   ? "Method: MYCLASS3:M3()"
   ? "   a =>", ::a, ",  should be: (a3)"
   ? "   b =>", ::b, ",  should be: (b3)"
   ? "   c =>", ::c, ",  should be: (c3)"
   ? "   d =>", ::d, ",  should be: (d3)"
   ? "   e =>", ::e, ",  should be: (e3)"
   ? "   f =>", ::f, ",  should be: (f3)"
   ? "   execute ::x(),  should be: MYCLASS3:X()"
   ::x()
   ? "   execute ::y(),  should be: MYCLASS3:Y()"
   ::y()
   ? "   execute ::z(),  should be: MYCLASS3:Z()"
   ::z()

   RETURN Self

METHOD x

   ? "   Method: MYCLASS3:X()"
   ? "      a =>", ::a, ",  should be: (a3)"
   ? "      b =>", ::b, ",  should be: (b3)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD y

   ? "   Method: MYCLASS3:Y()"
   ? "      a =>", ::a, ",  should be: (a3)"
   ? "      b =>", ::b, ",  should be: (b3)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self

METHOD z

   ? "   Method: MYCLASS3:Z()"
   ? "      a =>", ::a, ",  should be: (a3)"
   ? "      b =>", ::b, ",  should be: (b3)"
   ? "      c =>", ::c, ",  should be: (c3)"
   ? "      d =>", ::d, ",  should be: (d3)"
   ? "      e =>", ::e, ",  should be: (e3)"
   ? "      f =>", ::f, ",  should be: (f3)"

   RETURN Self
