00001
00002
00003
00004
00005
00006 #define enumeration int
00007 #define BEGIN_DATA struct { char *name; enum {DT_INTEGER=6,DT_DOUBLE=1,PT_ENUM=3,PT_SET=4,PT_BOOL=14} type; void *addr; } data[] = {
00008 typedef void (*SENDFN)(void *src,char *to,void *msg,unsigned int sz);
00009 typedef int (*RECVFN)(void *dst,char *from,void *data, unsigned int sz);
00010 #define INTEGER(N) {#N,DT_INTEGER,0},
00011 #define DOUBLE(N) {#N,DT_DOUBLE,0},
00012 #define ENUM(N) {#N,DT_ENUM,0),
00013 #define SET(N) {#N,DT_SET,0),
00014 #define BOOL(N) {#N,DT_BOOL,0),
00015 #define END_DATA {0}};
00016 #define DATA(T,N) (*(T*)(data[N].addr))
00017 #define INIT int init(void)
00018 #define CODE(DT,DEV) int code(void *my, double DT, PLCDEV *DEV)
00019
00020 typedef struct {
00021 unsigned int time;
00022 struct {
00023 SENDFN send;
00024 RECVFN recv;
00025 } net;
00026 } PLCDEV;
00027 #define NEVER (0x7fffffff)
00028 #define SNDMSG(DST,MSG) dev->net.send(my,DST,MSG,0)
00029 #define SNDDAT(DST,PTR,SZ) dev->net.send(my,DST,PTR,SZ)
00030 #define RCVMSG(SRC,BUF) dev->net.recv(my,SRC,BUF,sizeof(BUF)-1)
00031 #define RCVDAT(SRC,BUF,SZ) dev->net.recv(my,SRC,BUF,SZ)
00032 #define TIME dev->time
00033