home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / COMMNOBJ.H < prev    next >
C/C++ Source or Header  |  1990-09-07  |  4KB  |  133 lines

  1. /*
  2.     commnobj.h    3/14/88
  3.  
  4.     % Object primitive definitions.
  5.  
  6.     by Ted.
  7.  
  8.     OWL 1.2
  9.     Copyright (c) 1988, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Note:    Object IDs should be between 10 and 999.
  13.             They are used as omalloc tags.
  14.  
  15.     Revision History:
  16.     -----------------
  17.      6/16/88 Ted    revised to have inheritance and class factory functions
  18.      8/09/88 jmd    simplified object workings
  19.      9/12/88 jmd    Added in and out data to objects
  20.     11/14/88 jmd    Removed NULL check from obj_Do
  21.     11/20/88 jmd    Added ID to obj struct
  22.     11/20/88 jmd    Extracted commonod.h
  23.  
  24.      3/23/89 Ted    Renamed from objdecl.h
  25.      3/23/89 Ted    Added _xd stuff, moved id into xd.
  26.      7/12/89 ted    Converted '_func' prototypes from typedef to macro.
  27.      8/11/89 jmd    added WHO message
  28.  
  29.     11/06/89 jmd    added common_Class macro
  30.     12/12/89 jmd    added object names
  31.      3/28/90 jmd    ansi-fied
  32.      5/08/90 jmd    added underscores to func macros for vms compiler
  33.      7/29/90 jmd    added auxiliary func to objects
  34.      8/04/90 jmd    moved aux messages to oakaux.h
  35.      9/07/90 jmd    renamed oslist stuff
  36. */
  37. /* -------------------------------------------------------------------------- */
  38.  
  39. /* the object name list */
  40.  
  41. OEXTERN oslist_type objnamelist;
  42.  
  43. /* common_Class doesn't really exist, trick its children with this macro */
  44.  
  45. #define common_Class(od, msg, indata, outdata)            (TRUE)
  46.  
  47. /* object messages */
  48.  
  49. #define OBJM_OPEN            0
  50. #define OBJM_CLOSE            1
  51. #define OBJM_GETDATASIZE    2
  52. #define OBJM_INIT            3
  53. #define OBJM_LOAD            4
  54. #define OBJM_SAVE            5
  55. #define OBJM_WHO            6
  56. #define OBJM_BEWARE            7    /* For Perth Pink bottle object */
  57. #define OBJM_GETVALUE        8
  58. #define OBJM_LASTMSG       22
  59.  
  60. /* Object function types */
  61.  
  62. /* Object class/dispatch function type */
  63. #define class_func(fname)            int fname(VOID *_objdatap, int _msg, VOID *_indata, VOID *_outdata)
  64. typedef class_func ((*class_fptr));
  65.  
  66. /* Function type for enabling extended features of a window class */
  67. #define classinit_func(fname)        void fname(void)
  68.  
  69. /* -------------------------------------------------------------------------- */
  70. /* Object class/dispatch REQUEST function type */
  71.  
  72. #define objreq_func(fname)        int fname(VOID *_objdatap, int _msg, VOID *_indata, VOID *_outdata)
  73. typedef objreq_func ((*objreq_fptr));
  74.  
  75.  
  76. /* -------------------------------------------------------------------------- */
  77.  
  78. /* the object data type */
  79.  
  80. typedef struct obj_struct {
  81.     class_fptr  dispatch;            /* object dispatch function */
  82.     VOID       *od;                    /* object data (points to the _od) */
  83. } *obj_type;
  84.  
  85. /* Auxiliary function type */
  86. #define aux_func(fname)                int fname(obj_type _obj, int _msg, VOID *_indata, VOID *_outdata)
  87. typedef aux_func ((*aux_fptr));
  88.  
  89. typedef struct _commonxd {
  90.     int              id;                    /* the object ID */
  91.     int            name;                /* object name handle */
  92.     aux_fptr    aux;                /* object auxiliary function */
  93. } common_xd;
  94.  
  95. /* Macros */
  96.  
  97. #define obj_Do(obj, msg, indata, outdata)            \
  98.     (*(obj)->dispatch)((obj)->od, msg, (VOID *)(indata), (VOID *)(outdata))
  99.  
  100. #define obj_getxd(obj)                ((VOID *) &(obj)[1])
  101.  
  102. /* NOTE: These macros assume that the common_xd is first in the nested _xd */
  103. /*  structures. Memory trashing will occur if this is not the case. */
  104. /* This is the idea the xdata scheme is based on anyway. */
  105. #define obj_GetId(obj)                (((common_xd *) obj_getxd(obj))->id)
  106. #define obj_setid(obj, idd)            (((common_xd *) obj_getxd(obj))->id = (idd))
  107.  
  108. #define obj_SetNameHandle(obj, n)    (((common_xd *) obj_getxd(obj))->name = (n))
  109. #define    obj_GetNameHandle(obj)        (((common_xd *) obj_getxd(obj))->name)
  110. #define obj_GetName(obj)            (oslist_GetSym(objnamelist, obj_GetNameHandle(obj)))
  111. #define obj_GetAux(obj)                (((common_xd *) obj_getxd(obj))->aux)
  112. #define obj_setox(obj, ox)            (((common_xd *) obj_getxd(obj))->aux = (ox))
  113.  
  114. /* -------------------------------------------------------------------------- */
  115. /* function prototypes */
  116.  
  117. /* OBJFUNCS.C */
  118. extern void        oak_Close(void);
  119. extern obj_type obj_Open(class_fptr dispatch, VOID *opendata);
  120. extern void        obj_Close(obj_type obj);
  121. extern boolean    obj_Who(obj_type obj, int type);
  122. extern void        obj_RemoveName(obj_type obj);
  123. extern int        obj_DoAux(obj_type obj, int msg, VOID *indata, VOID *outdata);
  124. extern void        obj_SetAux(obj_type obj, aux_fptr aux);
  125.  
  126. extern objreq_func     (objreq_Null);
  127.  
  128. /* OBJNAME.C */
  129. extern obj_type obj_Find(char *name);
  130. extern int        obj_SetName(obj_type obj, char *name);
  131.  
  132. /* -------------------------------------------------------------------------- */
  133.