|
|
1.1 root 1:
2:
3: #define GENERICH 1
4: #ifdef BSD
5: #define name2(a,b) a\
6: b
7: #define name3(a,b,c) a\
8: b\
9: c
10: #define name4(a,b,c,d) a\
11: b\
12: c\
13: d
14: #else
15: #define name2(a,b) a/**/b
16: #define name3(a,b,c) a/**/b/**/c
17: #define name4(a,b,c,d) a/**/b/**/c/**/d
18: #endif
19:
20: #define declare(a,t) name2(a,declare)(t)
21: #define implement(a,t) name2(a,implement)(t)
22: #define declare2(a,t1,t2) name2(a,declare2)(t1,t2)
23: #define implement2(a,t1,t2) name2(a,implement2)(t1,t2)
24:
25:
26: extern genericerror(int,char*);
27: typedef int (*GPT)(int,char*);
28: #define set_handler(generic,type,x) name4(set_,type,generic,_handler)(x)
29: #define errorhandler(generic,type) name3(type,generic,handler)
30: #define callerror(generic,type,a,b) (*errorhandler(generic,type))(a,b)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.