|
|
1.1 root 1:
2: #include <stdio.h>
3:
4: #define GENERICH 1
5: #ifndef L_ctermid
6: #define name2(a,b) a\
7: b
8: #define name3(a,b,c) a\
9: b\
10: c
11: #define name4(a,b,c,d) a\
12: b\
13: c\
14: d
15: #else
16: #define name2(a,b) a/**/b
17: #define name3(a,b,c) a/**/b/**/c
18: #define name4(a,b,c,d) a/**/b/**/c/**/d
19: #endif
20:
21: #define declare(a,t) name2(a,declare)(t)
22: #define implement(a,t) name2(a,implement)(t)
23: #define declare2(a,t1,t2) name2(a,declare2)(t1,t2)
24: #define implement2(a,t1,t2) name2(a,implement2)(t1,t2)
25:
26:
27: extern genericerror(int,char*);
28: typedef int (*GPT)(int,char*);
29: #define set_handler(generic,type,x) name4(set_,type,generic,_handler)(x)
30: #define errorhandler(generic,type) name3(type,generic,handler)
31: #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.