home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2demo / oops / typeext.mod < prev    next >
Text File  |  1995-02-25  |  2KB  |  96 lines

  1. (*$XL+*)
  2. MODULE TypeExt;
  3.  
  4. IMPORT Terminal, SYSTEM;
  5. FROM   Storage IMPORT ALLOCATE, DEALLOCATE;
  6.  
  7. TYPE
  8.   RecTyp =  RECORD
  9.     x,y:      INTEGER;
  10.             END;
  11.   Rec0Typ = RECORD( RecTyp )
  12.     z:        LONGINT;
  13.             END;
  14.   Rec1Typ = RECORD( RecTyp )
  15.     ch:       CHAR;
  16.             END;
  17.   Rec20Typ = RECORD( Rec0Typ )
  18.     n:        CARDINAL;
  19.             END;
  20.   RecP     = POINTER TO RecTyp;
  21.   Rec0P    = POINTER TO Rec0Typ;
  22.   Rec1P    = POINTER TO Rec1Typ;
  23.   Rec20P   = POINTER TO Rec20Typ;
  24.  
  25. VAR
  26.   i,j:       INTEGER;
  27.   RecVar0:   RECORD( RecTyp )
  28.     c        : CHAR;
  29.              END;
  30.   RecVar   : RecTyp;
  31.   Rec0Var  : Rec0Typ;
  32.   Rec1Var  : Rec1Typ;
  33.   Rec20Var : Rec20Typ;
  34.   RecPVar  : RecP;
  35.   Rec20PVar: Rec20P;
  36.  
  37. PROCEDURE xyz( VAR RecVar:RecTyp );
  38. BEGIN
  39.   IF RecVar IS RecTyp THEN
  40.     Terminal.WriteString( "It's a RecTyp " );
  41.     Terminal.WriteLn();
  42.   END;
  43.   IF RecVar IS Rec0Typ THEN
  44.     Terminal.WriteString( "It's a Rec0Typ( RecTyp ) " );
  45.     Terminal.WriteLn();
  46.   END;
  47.   IF RecVar IS Rec1Typ THEN
  48.     Terminal.WriteString( "It's a Rec1Typ( RecTyp ) " );
  49.     Terminal.WriteLn();
  50.   END;
  51.   IF RecVar IS Rec20Typ THEN
  52.     Terminal.WriteString( "It's a Rec20Typ( Rec0Typ( RecTyp ) ) " );
  53.     Terminal.WriteLn();
  54.     WITH RecVar:Rec20Typ DO
  55.       RecVar.n := 9999H;
  56.     END;
  57.   END;
  58.   Terminal.WriteLn();
  59.   i := 4444H;
  60. END xyz;
  61.  
  62. BEGIN
  63.   i := 5555H;
  64.   NEW( Rec20PVar );
  65.   Rec20PVar^.x := 1;
  66.   Rec20PVar^.y := 2;
  67.   Rec20PVar^.z := 3;
  68.   Rec20PVar^.n := 0;
  69.   xyz( Rec20PVar^ );
  70.   RecPVar := Rec20PVar;
  71.   IF RecPVar IS RecP THEN
  72.     Terminal.WriteString( "RecPVar IS RecP" );
  73.     Terminal.WriteLn();
  74.   END;
  75.   IF RecPVar IS Rec0P THEN
  76.     Terminal.WriteString( "RecPVar IS Rec0P( RecP )" );
  77.     Terminal.WriteLn();
  78.   END;
  79.   IF RecPVar IS Rec1P THEN
  80.     Terminal.WriteString( "RecPVar IS Rec1P( RecP )" );
  81.     Terminal.WriteLn();
  82.   END;
  83.   IF RecPVar IS Rec20P THEN
  84.     Terminal.WriteString( "RecPVar IS Rec20P( Rec0P( RecP ) )" );
  85.     Terminal.WriteLn();
  86.   END;
  87.   Terminal.WriteLn();
  88.   DISPOSE( Rec20PVar );
  89.   RecVar0.y := 6666H;
  90.   j := 7777H;
  91.   xyz( RecVar );
  92.   xyz( Rec0Var );
  93.   xyz( Rec1Var );
  94.   xyz( Rec20Var );
  95. END TypeExt.
  96.