99e7d88e71bb8d784ae01018c57e0198bc0b47a3
[oweals/cde.git] / cde / lib / DtSvc / include / bms / scoop.h
1 /*
2  * File:         scoop.h $XConsortium: scoop.h /main/3 1995/10/26 15:48:17 rswiston $
3  * Language:     C
4  *
5  * (c) Copyright 1988, Hewlett-Packard Company, all rights reserved.
6  *
7  * (c) Copyright 1993, 1994 Hewlett-Packard Company                     *
8  * (c) Copyright 1993, 1994 International Business Machines Corp.       *
9  * (c) Copyright 1993, 1994 Sun Microsystems, Inc.                      *
10  * (c) Copyright 1993, 1994 Novell, Inc.                                *
11  */
12
13 #ifndef _scoop_h
14 #define _scoop_h
15
16 #ifndef NULL
17 #define NULL    0L
18 #endif
19
20 #ifndef TRUE
21 #define FALSE 0
22 #define TRUE 1
23 #endif          /* TRUE */
24
25 #if !defined(__sun)
26 # if (defined(__STDC__) || defined(__STDCPP__) || defined(__cplusplus) || defined(c_plusplus))
27 #  define CAT(a,b) a##b
28 # else
29 #  define CAT(a,b) a/**/b
30 # endif
31 #else
32   /* Sun C++ compiler uses the non-ansi cpp. */
33 # if defined(__cplusplus)
34 #  define CAT(a,b) a/**/b
35 # else
36 #  define CAT(a,b) a##b
37 # endif
38 #endif  
39
40
41 typedef long OSizeType ;
42
43 typedef struct root_class  *root_clasp, *object_clasp ;
44
45 typedef struct object_struct object;
46
47 typedef void (*SC_class_init)(object_clasp);
48 typedef void (*SC_object_init)(object *);
49 typedef object * (*SC_new_obj)(object_clasp);
50 typedef void (*SC_free_obj)(object *);
51 typedef object * (*SC_clone)(object *, object *);
52
53 #define root_class_part \
54   XeString       name ;          /* class name */                        \
55   SC_class_init  class_init;     /* fn to init my class struct */        \
56   OSizeType      object_size ;   /* size of object of this class */      \
57   short          init ;          /* boolean--class initialized state */  \
58   SC_object_init object_init;    /* fn to init my object struct */       \
59   SC_new_obj     new_obj;        /* fn to allocate class objects */      \
60   SC_free_obj    free_obj;       /* fn to free class objects */          \
61   SC_clone       clone;          /* `method' to clone an object */       \
62                                  /* no root private parts */
63
64 #define root_object_part
65
66 struct object_struct
67 { root_clasp class_ptr;
68   root_object_part
69   };
70
71 struct root_class
72   { object_clasp base ;         /* pointer to base class */
73     root_class_part } ;
74
75 #define memf(vref, fn, arglist)         ( (vref class_ptr)->fn arglist)
76 #define memvf0(v,fn)                    memf(v., fn, (&(v)))
77 #define memvf1(v,fn,a1)                 memf(v., fn, (&(v),a1))
78 #define memvf2(v,fn,a1,a2)              memf(v., fn, (&(v),a1,a2))
79 #define memvf3(v,fn,a1,a2,a3)           memf(v., fn, (&(v),a1,a2,a3))
80 #define memvf4(v,fn,a1,a2,a3,a4)        memf(v., fn, (&(v),a1,a2,a3,a4))
81 #define memvf5(v,fn,a1,a2,a3,a4,a5)     memf(v., fn, (&(v),a1,a2,a3,a4,a5))
82 #define memvf6(v,fn,a1,a2,a3,a4,a5,a6)  memf(v., fn, (&(v),a1,a2,a3,a4,a5,a6))
83 #define memvf7(v,fn,a1,a2,a3,a4,a5,a6,a7) \
84         memf(v., fn, (&(v),a1,a2,a3,a4,a5,a6,a7))
85 #define memvf8(v,fn,a1,a2,a3,a4,a5,a6,a7,a8) \
86         memf(v., fn, (&(v),a1,a2,a3,a4,a5,a6,a7,a8))
87 #define memvf9(v,fn,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
88         memf(v., fn, (&(v),a1,a2,a3,a4,a5,a6,a7,a8,a9))
89 #define mempf0(p,fn)                    memf(p->, fn, (p))
90 #define mempf1(p,fn,a1)                 memf(p->, fn, (p,a1))
91 #define mempf2(p,fn,a1,a2)              memf(p->, fn, (p,a1,a2))
92 #define mempf3(p,fn,a1,a2,a3)           memf(p->, fn, (p,a1,a2,a3))
93 #define mempf4(p,fn,a1,a2,a3,a4)        memf(p->, fn, (p,a1,a2,a3,a4))
94 #define mempf5(p,fn,a1,a2,a3,a4,a5)     memf(p->, fn, (p,a1,a2,a3,a4,a5))
95 #define mempf6(p,fn,a1,a2,a3,a4,a5,a6)  memf(p->, fn, (p,a1,a2,a3,a4,a5,a6))
96 #define mempf7(p,fn,a1,a2,a3,a4,a5,a6,a7) \
97         memf(p->, fn, (p,a1,a2,a3,a4,a5,a6,a7))
98 #define mempf8(p,fn,a1,a2,a3,a4,a5,a6,a7,a8) \
99         memf(p->, fn, (p,a1,a2,a3,a4,a5,a6,a7,a8))
100 #define mempf9(p,fn,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
101         memf(p->, fn, (p,a1,a2,a3,a4,a5,a6,a7,a8,a9))
102   
103 #define memd(vref, dm)                  (vref dm)
104 #define base_memf(my_class, fn, arglist)        \
105     ((*(my_class->base->fn)) arglist)
106
107 #define memfp(vref, fn, arglist)        memf (vref, CLASS.fn, arglist)
108 #define memdp(vref, dm)                 memd (vref, CLASS.dm)
109
110 #define memvs(v, sdm)                   (*((v.class_ptr)->sdm))
111 #define memps(p, sdm)                   (*((p->class_ptr)->sdm))
112 #define stat_def(name, type)            type *name; type CAT(name,_static) ;
113 #define stat_init(def_class, class_ptr, name) \
114         (class_ptr->name) = &(def_class->CAT(name,_static))
115
116 extern object_clasp root_class ;
117
118 extern void object_destroy 
119 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
120    (object *p);
121 #else
122    ();
123 #endif
124
125 extern object *object_create 
126 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
127    (object_clasp c);
128 #else
129    ();
130 #endif
131
132 extern void object_init 
133 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
134    (object_clasp c,  object *p);
135 #else
136    ();
137 #endif
138     
139 #endif /* _scoop_h */
140 /* PLACE NOTHING AFTER THIS endif */