home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2demo / animals / testanim.mod < prev   
Text File  |  1995-05-02  |  4KB  |  146 lines

  1. (*$XL+       Modula-2 extensions: '_' in symbol names, OOP facilities   *)
  2. (*$CDECL+    C-style procedures                                         *)
  3. (*$A         default alignment for record fields                        *)
  4.  
  5. MODULE TESTANIMALS;
  6.  
  7. (************************************************************************
  8.     Copyright (c) 1994,1995 by Juergen Neuhoff
  9.  
  10.     This is the Modula-2 version of the ANIMALS sample program
  11.     from the IBM Developer's Toolkit 2.1 for OS/2.
  12.  
  13.     It demonstrates the implementation and usage of new SOM-classes.
  14.     And it also shows the creation of dynamic link libraries for SOM.
  15.  
  16.     Enter the following commands to compile and run this demo:
  17.  
  18.     MOD TESTANIM.MOD -o -m
  19.     LINK386 @ANIMAL.RSP
  20.     LINK386 @DOG.RSP
  21.     LINK386 @LDOG.RSP
  22.     LINK386 @BDOG.RSP
  23.     LINK386 @TESTANIM.RSP
  24.     TESTANIM
  25.  
  26.     Recommended compiler switches:
  27.       -o     Code optimization
  28.       -m     Make for linker
  29.  
  30. *************************************************************************)
  31.  
  32.  
  33. IMPORT SOM;
  34. IMPORT ANIMAL;
  35. IMPORT DOG;
  36. IMPORT LDOG;
  37. IMPORT BDOG;
  38. IMPORT OS2DEF;
  39. IMPORT Storage;
  40. FROM   SOMMISC  IMPORT somWriteString, somWriteLn;
  41. FROM   SYSTEM   IMPORT ADR;
  42.  
  43.  
  44. VAR
  45.   myAnimal       : ANIMAL.PAnimal;
  46.   myDog          : DOG.PDog;
  47.   myLittleDog    : LDOG.PLittleDog;
  48.   myBigDog       : BDOG.PBigDog;
  49.   classAnimal    : SOM.PSOMClass;
  50.   classDog       : SOM.PSOMClass;
  51.   classLittleDog : SOM.PSOMClass;
  52.   classBigDog    : SOM.PSOMClass;
  53.   NoRetValue     : SOM.somToken;
  54.   ok             : BOOLEAN;
  55.  
  56.  
  57. PROCEDURE newString( szVal : ARRAY OF CHAR ) : OS2DEF.PSZ;
  58. BEGIN
  59.   (* This C-style procedure uses caller's address of 'szVal' *)
  60.   RETURN ADR( szVal );
  61. END newString;
  62.  
  63.  
  64. BEGIN
  65.  
  66.   (* create classes *)
  67.   classAnimal := ANIMAL.AnimalNewClass
  68.   ( ANIMAL.Animal_MajorVersion, ANIMAL.Animal_MinorVersion );
  69.   classDog := DOG.DogNewClass
  70.   ( DOG.Dog_MajorVersion, DOG.Dog_MinorVersion );
  71.   classLittleDog := LDOG.LittleDogNewClass
  72.   ( LDOG.LittleDog_MajorVersion, LDOG.LittleDog_MinorVersion );
  73.   classBigDog := BDOG.BigDogNewClass
  74.   ( BDOG.BigDog_MajorVersion, BDOG.BigDog_MinorVersion );
  75.  
  76.  
  77.   (* create objects using constructors 'newAnimal' and 'newDog' *)
  78.   myAnimal := classAnimal( ANIMAL.PM_Animal )^.newAnimal
  79.   (
  80.     newString( "Roar!!!" )
  81.   );
  82.   myDog := classDog( DOG.PM_Dog )^.newDog
  83.   (
  84.     newString( "Grrr" ),
  85.     newString( "Retriever" ),
  86.     newString( "Yellow" )
  87.   );
  88.   myLittleDog := classLittleDog( DOG.PM_Dog )^.newDog
  89.   (
  90.     newString( "unknown noise" ),
  91.     newString( "French Poodle" ),
  92.     newString( "Black" )
  93.   );
  94.   myBigDog := classBigDog( DOG.PM_Dog )^.newDog
  95.   (
  96.     newString( "unknown noise" ),
  97.     newString( "German Shepherd" ),
  98.     newString( "Brown")
  99.   );
  100.  
  101.  
  102.   (* display objects *)
  103.  
  104.   somWriteString( "=====================" );
  105.   somWriteLn();
  106.   somWriteString( "myAnimal:" );
  107.   somWriteLn();
  108.   myAnimal^.display();
  109.  
  110.   somWriteString( "=====================" );
  111.   somWriteLn();
  112.   somWriteString( "myDog:" );
  113.   somWriteLn();
  114.   myDog^.display();
  115.  
  116.   somWriteString( "=====================" );
  117.   somWriteLn();
  118.   somWriteString( "myLittleDog:" );
  119.   somWriteLn();
  120.   myLittleDog^.display();
  121.  
  122.   somWriteString( "=====================" );
  123.   somWriteLn();
  124.   somWriteString( "myBigDog:" );
  125.   somWriteLn();
  126.   myBigDog^.display();
  127.  
  128.   somWriteString( "=====================" );
  129.   somWriteLn();
  130.   somWriteString( "myBigDog again:" );
  131.   somWriteLn();
  132.   NoRetValue := NIL;
  133.   ok := myBigDog^.somDispatch
  134.   ( NoRetValue, SOM.somIdFromString( "display" ), myBigDog );
  135.  
  136.   (* free objects *)
  137.   somWriteLn();
  138.   myAnimal^.somFree();
  139.   myDog^.somFree();
  140.   myLittleDog^.somFree();
  141.   myBigDog^.somFree();
  142.  
  143.   HALT();
  144.  
  145. END TESTANIMALS.
  146.