|
|
1.1 ! root 1: #ifndef THINKCLIENT_H ! 2: #define THINKCLIENT_H ! 3: ! 4: struct Thinksubs { ! 5: int (*Thinkchar)(); ! 6: int (*Thinknchars)(); ! 7: int (*Thinkflush)(); ! 8: int (*Thinkmap)(); ! 9: int (*Thinkabort)(); ! 10: }; ! 11: ! 12: #ifndef THINKSHARE_C ! 13: ! 14: #define Thfun(f) (((struct Thinksubs *)(thclient->data))->f) ! 15: ! 16: #define Thtest ((thclient || (thclient=getname("thinksubs"))) && thclient->proc) ! 17: ! 18: #define Thcall0(f) (Thtest ? Thfun(f)() : -1) ! 19: #define Thcall1(f, a) (Thtest ? Thfun(f)(a) : -1) ! 20: #define Thcall2(f, a, b) (Thtest ? Thfun(f)((a), (b)) : -1) ! 21: ! 22: #define thinkchar(c) Thcall1(Thinkchar, c) ! 23: #define thinknchars(n, p) Thcall2(Thinknchars, n, p) ! 24: #define thinkflush() Thcall0(Thinkflush) ! 25: #define thinkmap(b, r) Thcall2(Thinkmap, b, r) ! 26: #define thinkabort() Thcall0(Thinkabort) ! 27: ! 28: struct Nqueue *thclient; ! 29: ! 30: #endif ! 31: ! 32: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.