home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2demo / wpcar / car.def next >
Text File  |  1996-02-27  |  6KB  |  227 lines

  1. (*$DLL       to be implemented as a dynamic link library                *)
  2. (*$XL+       language extensions: '_' for names, OOP-facilities         *)
  3. (*$CDECL+    C-style procedures                                         *)
  4. (*$A         default alignment for record fields                        *)
  5.  
  6.  
  7. DEFINITION MODULE CAR;
  8.  
  9. (***************************************************************************
  10.   OS/2 2.x/3.0 Workplace Shell interface for class 'Car'.
  11.  
  12.   This is the Modula-2 version from a similar C-program
  13.   sample class of IBM's Developer's Toolkit 2.1.
  14.  
  15.   Copyright (c) 1995 by Juergen Neuhoff
  16. ****************************************************************************)
  17.  
  18. IMPORT SOM;          (* needed for basic SOM features *)
  19.  
  20.  
  21.  
  22. (***************************************************************************
  23.   Additional IMPORT-, TYPE-, and CONST-declarations needed for the
  24.   interfaces of class 'Car' and metaclass 'M_Car'
  25. ****************************************************************************)
  26.  
  27. IMPORT WPDATAF;      (* this module contains the parent class interface *)
  28. IMPORT OS2DEF;
  29.  
  30.  
  31.  
  32. (***************************************************************************
  33.   SOM class API for 'Car', including type-bound procedures
  34. ****************************************************************************)
  35.  
  36. (* These types are almost always needed for a SOM class description *)
  37.  
  38. TYPE PSOMClass              = SOM.PSOMClass;
  39. TYPE INTEGER4               = SOM.INTEGER4;
  40. TYPE somMToken              = SOM.somMToken;
  41. TYPE somDToken              = SOM.somDToken;
  42. TYPE somMethodProc          = SOM.somMethodProc;
  43. TYPE PCar                   = POINTER TO Car;     (* instance pointer *)
  44. TYPE PM_Car                 = POINTER TO M_Car;   (* metaclass pointer *)
  45.  
  46. (* major and minor version numbers for new SOM class 'Car' *)
  47.  
  48. CONST
  49.   Car_MajorVersion     = 1;
  50.   Car_MinorVersion     = 2;
  51.  
  52.  
  53. (*
  54.  * Declare the C specific class data structure
  55.  *)
  56. TYPE
  57.   CarCClassDataStructure  = RECORD
  58.     parentMtab              : SOM.somMethodTabs;
  59.     instanceDataToken       : SOM.somDToken;
  60.                             END;
  61. VAR
  62.   CarCClassData           : CarCClassDataStructure;
  63.  
  64.  
  65.  
  66. (* Every SOM class has a public <class>ClassData structure,
  67.    whose fields are tokens needed for method resolution.
  68.    In this example there are 14 token fields for the 14 methods
  69.    of the SOM class 'Car'.
  70. *)
  71. TYPE
  72.   CarClassDataStructure     = RECORD
  73.     classObject               : PSOMClass;
  74.     QueryBrakes               : somMToken;
  75.     SetBrakes                 : somMToken;
  76.     QueryDuration             : somMToken;
  77.     SetDuration               : somMToken;
  78.     QueryHighTone             : somMToken;
  79.     SetHighTone               : somMToken;
  80.     QueryLowTone              : somMToken;
  81.     SetLowTone                : somMToken;
  82.     QuerySpeed                : somMToken;
  83.     SetSpeed                  : somMToken;
  84.     BeepHorn                  : somMToken;
  85.     AddDashboardPage          : somMToken;
  86.     AddHornBeepPage           : somMToken;
  87.     TrapTest                  : somMToken;
  88.                               END;
  89.  
  90. VAR
  91.   CarClassData : CarClassDataStructure;
  92.  
  93.  
  94. (* Class 'Car' is expressed as an extension of record type 'WPDataFile'
  95.    inheriting all record fields and type bound procedures.
  96.    The directive '$SOM+' tells the compiler to treat the new record
  97.    type 'Car' as a SOM class, and not as an extended Modula-2 record.
  98. *)
  99. TYPE
  100.   (*$SOM+ *)
  101.   Car = RECORD( WPDATAF.WPDataFile ) END;
  102.   (*$SOM- *)
  103.  
  104.  
  105. (* Every SOM class must have <class>NewClass procedure *)
  106.  
  107. PROCEDURE CarNewClass
  108. (
  109.   majorVersion  : INTEGER4;
  110.   minorVersion  : INTEGER4
  111. )               : PSOMClass;
  112.  
  113.  
  114.  
  115. (* A SOM class may have type bound procedures (also known as methods).
  116.    For each of the following type bound procedures a corresponding
  117.    token field must have been specified in a previous <class>ClassData
  118.    record variable.
  119. *)
  120. PROCEDURE( Self : PCar ) QueryBrakes
  121. ( ) : BOOLEAN;
  122.  
  123. PROCEDURE( Self : PCar ) SetBrakes
  124. (
  125.   fBrake : BOOLEAN
  126. );
  127.  
  128. PROCEDURE( Self : PCar ) QueryDuration
  129. ( ) : LONGCARD;
  130.  
  131. PROCEDURE( Self : PCar ) SetDuration
  132. (
  133.   ulDuration : LONGCARD
  134. );
  135.  
  136. PROCEDURE( Self : PCar ) QueryHighTone
  137. ( ) : LONGCARD;
  138.  
  139. PROCEDURE( Self : PCar ) SetHighTone
  140. (
  141.   ulTone : LONGCARD
  142. );
  143.  
  144. PROCEDURE( Self : PCar ) QueryLowTone
  145. ( ) : LONGCARD;
  146.  
  147. PROCEDURE( Self : PCar ) SetLowTone
  148. (
  149.   ulTone : LONGCARD
  150. );
  151.  
  152. PROCEDURE( Self : PCar ) QuerySpeed
  153. ( ) : LONGCARD;
  154.  
  155. PROCEDURE( Self : PCar ) SetSpeed
  156. (
  157.   ulSpeed       : LONGCARD
  158. );
  159.  
  160. PROCEDURE( Self : PCar ) BeepHorn
  161. ( ) : BOOLEAN;
  162.  
  163. PROCEDURE( Self : PCar ) AddDashboardPage
  164. (
  165.   hwndNotebook  : OS2DEF.HWND
  166. )               : LONGCARD;
  167.  
  168. PROCEDURE( Self : PCar ) AddHornBeepPage
  169. (
  170.   hwndNotebook  : OS2DEF.HWND
  171. )               : LONGCARD;
  172.  
  173. PROCEDURE( Self : PCar ) TrapTest
  174. ( );
  175.  
  176.  
  177.  
  178. (*************************************************************************
  179.   SOM class API for 'M_Car', including type-bound procedures.
  180.   This is the meta-class.
  181.  
  182.   The meta-class is optional and should be used for factory methods
  183.   such as constructors or destructors. The meta class syntax is
  184.   similar to the one of the regular class.
  185. **************************************************************************)
  186.  
  187.  
  188. CONST
  189.   M_Car_MajorVersion   = 1;
  190.   M_Car_MinorVersion   = 2;
  191.  
  192. TYPE
  193.   M_CarCClassDataStructure  = RECORD
  194.     parentMtab              : SOM.somMethodTabs;
  195.     instanceDataToken       : SOM.somDToken;
  196.                             END;
  197. VAR
  198.   M_CarCClassData           : M_CarCClassDataStructure;
  199.  
  200. TYPE
  201.   M_CarClassDataStructure   = RECORD
  202.     classObject               : PSOMClass;
  203.     clsQueryModuleHandle      : somMToken;
  204.                               END;
  205.  
  206. VAR
  207.   M_CarClassData : M_CarClassDataStructure;
  208.  
  209. TYPE
  210.   (*$SOM+ *)
  211.   M_Car = RECORD( WPDATAF.M_WPDataFile ) END;
  212.   (*$SOM- *)
  213.  
  214.  
  215. PROCEDURE M_CarNewClass
  216. (
  217.   majorVersion : INTEGER4;
  218.   minorVersion : INTEGER4
  219. )              : PSOMClass;
  220.  
  221.  
  222. PROCEDURE( Self : PM_Car ) clsQueryModuleHandle
  223. ( ) : OS2DEF.HMODULE;
  224.  
  225.  
  226. END CAR.
  227.