#ifndef STRANS_IPC_H #define STRANS_IPC_H #include #define IPCPATH "/tmp/strans.%d" /* * Request: [want-preedit, modifiers, key byte 0, ..., key byte 3]. * Only Mmask modifier bits are retained. * Response: [eaten, commit-length-low, commit-length-high, commit...], * followed, when requested, by * [preedit-length-low, preedit-length-high, preedit...]. * Lengths are little-endian byte counts; fields are at most Ipcfieldmax bytes. */ enum { Kspec = 0x110000, Kback = Kspec|0x08, Ktab = Kspec|0x09, Kret = Kspec|0x0d, Kesc = Kspec|0x1b, Kup = Kspec|0x52, Kdown = Kspec|0x54, Kmodfirst = Kspec|0xe1, Kmodlast = Kspec|0xee, Mshift = 1<<0, Mctrl = 1<<2, Malt = 1<<3, Msuper = 1<<6, Mmask = Mshift|Mctrl|Malt|Msuper, Ipcreqsz = 6, Ipclensz = 2, Ipcresphdrsz = 1 + Ipclensz, Ipcfieldmax = 256, Ipcmaxresp = Ipcresphdrsz + Ipcfieldmax + Ipclensz + Ipcfieldmax, }; typedef struct Ipcresp Ipcresp; struct Ipcresp { int eaten; size_t ncommit; size_t npreedit; }; void ipcpackreq(unsigned char[Ipcreqsz], int, unsigned int, unsigned int); void ipcunpackreq(const unsigned char[Ipcreqsz], int*, unsigned int*, unsigned int*); int ipcpackresp(unsigned char*, size_t, int, const char*, size_t, const char*, size_t, int); int ipcreadn(int, void*, size_t); int ipcsend(int, const void*, size_t); int ipcreadresp(int, int, char*, size_t, char*, size_t, Ipcresp*); #endif