2 * File: scoop.h $XConsortium: scoop.h /main/3 1995/10/26 15:48:17 rswiston $
5 * (c) Copyright 1988, Hewlett-Packard Company, all rights reserved.
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. *
26 # if (defined(__STDC__) || defined(__STDCPP__) || defined(__cplusplus) || defined(c_plusplus))
27 # define CAT(a,b) a##b
29 # define CAT(a,b) a/**/b
32 /* Sun C++ compiler uses the non-ansi cpp. */
33 # if defined(__cplusplus)
34 # define CAT(a,b) a/**/b
36 # define CAT(a,b) a##b
41 typedef long OSizeType ;
43 typedef struct root_class *root_clasp, *object_clasp ;
45 typedef struct object_struct object;
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 *);
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 */
64 #define root_object_part
67 { root_clasp class_ptr;
72 { object_clasp base ; /* pointer to base class */
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))
103 #define memd(vref, dm) (vref dm)
104 #define base_memf(my_class, fn, arglist) \
105 ((*(my_class->base->fn)) arglist)
107 #define memfp(vref, fn, arglist) memf (vref, CLASS.fn, arglist)
108 #define memdp(vref, dm) memd (vref, CLASS.dm)
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))
116 extern object_clasp root_class ;
118 extern void object_destroy
119 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
125 extern object *object_create
126 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
132 extern void object_init
133 #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
134 (object_clasp c, object *p);
139 #endif /* _scoop_h */
140 /* PLACE NOTHING AFTER THIS endif */