1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
/* see ../Doc/C.html
*/
typedef struct Msg Msg;
typedef int Id; /* Window identifier */
typedef enum Bool {false, true} Bool;
typedef struct Range Range;
/* name of environment variable */
#define WILYFIFO "WILYFIFO"
enum {
HSIZE= 12, /* minimum length of a message fragment to be able
to determine the length of the full message. */
MAXERRMSG = 1024 /* maximum length of an error message */
};
typedef enum Mtype {
/* EVENTS: also used for event masks. */
WEexec = 1,
WEgoto = 2,
WEdestroy = 4,
WEreplace = 8,
WEfencepost,
/* REQUESTS AND RESPONSES */
WRerror,
WMlist, WRlist,
WMnew, WRnew,
WMattach, WRattach,
WMsetname, WRsetname,
WMgetname, WRgetname,
WMsettools,WRsettools,
WMgettools,WRgettools,
WMread, WRread,
WMreplace, WRreplace,
WMexec, WRexec,
WMgoto, WRgoto,
WMfencepost
} Mtype;
struct Range {
ulong p0,p1;
};
#define RLEN(r) ((r).p1 -(r).p0)
#define RCONTAINS(r, p) ( ((p)>=(r).p0) && ((p) < (r).p1) )
#define RINTERSECT(r0, r1) ( ((r0).p1 >= (r1).p0) && ((r0).p0 <= (r1).p1) )
#define RISSUBSET(q,r) ( ((q).p0 >= (r).p0) && ((q).p1 <= (r).p1) )
#define ROK(r) ((r).p1 >= (r).p0)
struct Msg {
Mtype t;
Id m; /* message */
Id w; /* window */
Range r;
ushort flag;
char * s;
};
/* ../libmsg/connect.c */
int client_connect (void);
int wilyfifolisten (void);
int wilyfifotalk (void);
void fifo_cleanup (void);
int wily_connect (char*,int);
/* ../libmsg/msg.c */
int msg_size (Msg *m);
void msg_flatten (Msg*, uchar*);
int msg_init (Msg*, uchar*);
ulong msg_bufsize (uchar*);
void msg_print (Msg *);
void msg_fill (Msg*, Mtype , Id w, Range r, ushort flag, char*s) ;
#define FULLMSG(ptr,n) ( (n) >= HSIZE && (n) >= msg_bufsize(ptr) )
/* ../libmsg/rpc.c */
typedef struct Handle Handle;
extern Range nr; /* null range */
Handle* rpc_init (int);
int rpc_fileno(Handle *h);
Bool rpc_isconnected(Handle*);
void rpc_free (Handle*);
char* rpc_list (Handle*h, char **bufptr);
char* rpc_new (Handle*, char *, Id*, ushort);
char* rpc_attach (Handle*, Id, ushort);
char* rpc_setname (Handle*, Id, char *);
char* rpc_getname (Handle*, Id, char **);
char* rpc_settools (Handle*, Id, char *);
char* rpc_gettools (Handle*, Id, char **);
char* rpc_read (Handle*, Id, Range, char*);
char* rpc_replace (Handle*, Id, Range, char*);
char* rpc_exec (Handle*, Id , char *);
char* rpc_goto (Handle*, Id * , Range*, char*, Bool);
int rpc_event (Handle*, Msg *);
int rpc_bounce (Handle*, Msg *);
Bool rpc_wouldblock(Handle*);
#define MAX(a,b)(((a)>(b))?(a):(b))
#define MIN(a,b)(((a)<(b))?(a):(b))
#define NEW(t) ((t*)salloc(sizeof(t)))
/* ../libmsg/util.c */
int clip(int , int , int );
void eprintf(char *, ...);
void * salloc(int );
void * srealloc(void *, int);
Range intersect (Range, Range);
Range rclip (Range, Range);
ulong pclipr(ulong p, Range r);
Range range(ulong , ulong );
ulong ladjust(ulong , Range , int );
ulong radjust(ulong , Range , int );
|