#ifndef STRANS_IPC_H #define STRANS_IPC_H #include #define IPCPATH "/tmp/strans.2.%d" /* * Request: [want-preedit, modifiers, key byte 0, ..., key byte 3]. * 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, Kshift = Kspec|0xe1, Ksuper = Kspec|0xeb, Mshift = 1<<0, Mctrl = 1<<2, Malt = 1<<3, Msuper = 1<<6, 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