Mercurial > MadButterfly
annotate nodejs/njs_mb_supp.c @ 1450:6644ef3d75eb
Add get_child method for coord in JS
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 13 Apr 2011 14:36:32 +0800 |
parents | 88bd0eee2b00 |
children |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
753
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
753
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
546
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 /*! \brief Implement X11 backend for nodejs plugin. |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 * |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 * Since nodejs use libev to handle event loops, part of X11 backend |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 * code can not be used directly. The part of code should be rewrote. |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 * The part is about |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 */ |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 #include <stdio.h> |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
10 #include <string.h> |
546
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 #include <ev.h> |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 #include "mb_tools.h" |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
13 #include <mb_backend.h> |
1056
88bd0eee2b00
Rename X_supp_njs.[ch] to njs_mb_supp.[ch].
Thinker K.F. Li <thinker@codemud.net>
parents:
1055
diff
changeset
|
14 #include "njs_mb_supp.h" |
546
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 #ifndef ASSERT |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 #define ASSERT(x) |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 #endif |
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 |
1039 | 20 #define OK 0 |
21 #define ERR -1 | |
22 | |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
23 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
24 /*! \defgroup njs_timer_man Timer manager for nodejs. |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
25 * @{ |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
26 */ |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
27 struct _njs_timer_timeout { |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
28 ev_timer tmwatcher; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
29 mb_timer_cb_t cb; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
30 mb_timeval_t *timeout; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
31 void *data; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
32 }; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
33 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
34 static int njs_timer_man_timeout(mb_timer_man_t *tm_man, |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
35 mb_timeval_t *tm_out, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
36 mb_timer_cb_t cb, void *data); |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
37 static void njs_timer_man_remove(mb_timer_man_t *tm_man, int tm_hdl); |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
38 static mb_timer_man_t *njs_timer_man_new(void); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
39 static void njs_timer_man_free(mb_timer_man_t *timer_man); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
40 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
41 static mb_timer_man_t njs_timer_man = { |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
42 njs_timer_man_timeout, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
43 njs_timer_man_remove |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
44 }; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
45 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
46 static mb_timer_factory_t njs_timer_factory = { |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
47 njs_timer_man_new, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
48 njs_timer_man_free |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
49 }; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
50 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
51 static void |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
52 njs_timer_man_cb(EV_P_ ev_timer *tmwatcher, int revent) { |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
53 struct _njs_timer_timeout *timer_timeout = |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
54 MEM2OBJ(tmwatcher, struct _njs_timer_timeout, tmwatcher); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
55 mb_timeval_t now; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
56 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
57 get_now(&now); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
58 timer_timeout->cb((int)timer_timeout, timer_timeout->timeout, &now, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
59 timer_timeout->data); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
60 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
61 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
62 static int |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
63 njs_timer_man_timeout(mb_timer_man_t *tm_man, |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
64 mb_timeval_t *timeout, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
65 mb_timer_cb_t cb, void *data) { |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
66 struct _njs_timer_timeout *timer_timeout; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
67 mb_timeval_t now, timeout_diff; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
68 ev_tstamp timeout_stamp; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
69 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
70 timer_timeout = O_ALLOC(struct _njs_timer_timeout); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
71 if(timer_timeout == NULL) |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
72 return ERR; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
73 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
74 timer_timeout->cb = cb; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
75 timer_timeout->timeout = timeout; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
76 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
77 get_now(&now); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
78 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
79 memcpy(&timeout_diff, timeout, sizeof(mb_timeval_t)); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
80 MB_TIMEVAL_DIFF(&timeout_diff, &now); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
81 timeout_stamp = (ev_tstamp)MB_TIMEVAL_SEC(&timeout_diff) + |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
82 (ev_tstamp)MB_TIMEVAL_USEC(&timeout_diff) / 1000000; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
83 ev_timer_init(&timer_timeout->tmwatcher, njs_timer_man_cb, |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
84 timeout_stamp, 0); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
85 ev_timer_start(&timer_timeout->tmwatcher); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
86 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
87 return (int)timer_timeout; |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
88 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
89 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
90 static void |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
91 njs_timer_man_remove(struct _mb_timer_man *tm_man, int tm_hdl) { |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
92 struct _njs_timer_timeout *timer_timeout = |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
93 (struct _njs_timer_timeout *)tm_hdl; |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
94 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
95 ev_timer_stop(&timer_timeout->tmwatcher); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
96 free(timer_timeout); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
97 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
98 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
99 static mb_timer_man_t * |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
100 njs_timer_man_new(void) { |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
101 return &njs_timer_man; |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
102 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
103 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
104 static void |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
105 njs_timer_man_free(mb_timer_man_t *timer_man) { |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
106 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
107 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
108 void |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
109 njs_mb_reg_timer_man(void) { |
1040
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
110 mb_reg_timer_factory(&njs_timer_factory); |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
111 } |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
112 |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
113 /* @} */ |
22e5cf38d8e8
Timer manager for njs
Thinker K.F. Li <thinker@codemud.net>
parents:
1039
diff
changeset
|
114 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
115 |
1039 | 116 /*! \defgroup njs_io_man IO manager for nodejs. |
117 * @{ | |
118 */ | |
119 struct _njs_io_reg { | |
120 ev_io iowatcher; | |
121 int fd; | |
122 mb_IO_cb_t cb; | |
123 void *data; | |
124 }; | |
125 | |
126 static int njs_io_man_reg(struct _mb_IO_man *io_man, | |
127 int fd, MB_IO_TYPE type, mb_IO_cb_t cb, void *data); | |
128 static void njs_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl); | |
129 static mb_IO_man_t *njs_io_man_new(void); | |
130 static void njs_io_man_free(mb_IO_man_t *io_man); | |
131 | |
132 static mb_IO_man_t njs_io_man = { | |
133 njs_io_man_reg, | |
134 njs_io_man_unreg | |
135 }; | |
136 | |
137 /*! \brief IO factory to integrate MadButterfly to event loop of nodejs. | |
138 */ | |
139 static mb_IO_factory_t njs_io_factory = { | |
140 njs_io_man_new, | |
141 njs_io_man_free | |
142 }; | |
143 | |
144 /*! \brief Bridge libev callback to IO manager callback. | |
145 */ | |
146 static void | |
147 njs_io_man_cb(EV_P_ ev_io *iowatcher, int revent) { | |
148 struct _njs_io_reg *io_reg = | |
149 MEM2OBJ(iowatcher, struct _njs_io_reg, iowatcher); | |
150 MB_IO_TYPE type; | |
151 | |
152 switch(revent & (EV_READ | EV_WRITE)) { | |
153 case EV_READ: | |
154 type = MB_IO_R; | |
155 break; | |
156 case EV_WRITE: | |
157 type = MB_IO_W; | |
158 break; | |
159 case EV_READ | EV_WRITE: | |
160 type = MB_IO_RW; | |
161 break; | |
162 } | |
163 | |
164 io_reg->cb((int)io_reg, io_reg->fd, type, io_reg->data); | |
165 } | |
166 | |
167 static int | |
168 njs_io_man_reg(struct _mb_IO_man *io_man, | |
169 int fd, MB_IO_TYPE type, mb_IO_cb_t cb, void *data) { | |
170 int _type; | |
171 struct _njs_io_reg *io_reg; | |
172 | |
173 if(type == MB_IO_R) | |
174 _type = EV_READ; | |
175 else if(type == MB_IO_W) | |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
176 _type = EV_WRITE; |
1039 | 177 else if(type == MB_IO_RW) |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
178 _type = EV_READ | EV_WRITE; |
1039 | 179 else |
180 return ERR; | |
181 | |
182 io_reg = O_ALLOC(struct _njs_io_reg); | |
183 if(io_reg == NULL) | |
184 return ERR; | |
185 | |
186 io_reg->fd = fd; | |
187 io_reg->cb = cb; | |
188 io_reg->data = data; | |
189 | |
190 ev_io_init(&io_reg->iowatcher, njs_io_man_cb, fd, _type); | |
191 ev_io_start(&io_reg->iowatcher); | |
192 | |
193 return (int)io_reg; | |
194 } | |
195 | |
196 static void | |
197 njs_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl) { | |
198 struct _njs_io_reg *io_reg = (struct _njs_io_reg *)io_hdl; | |
199 | |
200 ev_io_stop(&io_reg->iowatcher); | |
201 free(io_reg); | |
202 } | |
203 | |
204 static mb_IO_man_t * | |
205 njs_io_man_new(void) { | |
206 return &njs_io_man; | |
207 } | |
208 | |
209 static void | |
210 njs_io_man_free(mb_IO_man_t *io_man) { | |
211 } | |
212 | |
213 /*! \brief Register an IO factory with MadButterfly backend. | |
214 */ | |
215 void | |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
216 njs_mb_reg_IO_man(void) { |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
217 mb_reg_IO_factory(&njs_io_factory); |
1039 | 218 } |
219 | |
220 /* @} */ | |
221 | |
551
9e69c4a0f565
rename njs_ev_data_t to njs_runtime_t
Thinker K.F. Li <thinker@branda.to>
parents:
550
diff
changeset
|
222 /*! \brief Free njs_runtime_t. |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
223 */ |
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
224 void |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
225 njs_mb_free(njs_runtime_t *rt) { |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
226 /*! |
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
227 * TODO: Release all IO and timer request. |
546
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
228 */ |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
229 mb_runtime_free(rt->mb_rt); |
554
4caf6090825f
Fix leaking on freeing a njs runtime object
Thinker K.F. Li <thinker@branda.to>
parents:
553
diff
changeset
|
230 free(rt); |
546
249bcbf07eb0
Reuse and adapt X_supp.c by implmeneting X_supp_njs.c
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
231 } |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
232 |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
233 /*! \brief Free njs_runtime_t. |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
234 */ |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
235 void |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
236 njs_mb_free_keep_win(njs_runtime_t *rt) { |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
237 /* |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
238 * TODO: Release all IO and timer request. |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
239 */ |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
240 mb_runtime_free_keep_win(rt->mb_rt); |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
241 free(rt); |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
242 } |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
243 |
571
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
244 int |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
245 njs_mb_flush(njs_runtime_t *rt) { |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
246 mb_rt_t *mb_rt = rt->mb_rt; |
571
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
247 int r; |
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
248 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
249 r = mb_runtime_flush(mb_rt); |
571
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
250 return r; |
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
251 } |
13b15b7a463b
Redraw all and changed in Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
252 |
551
9e69c4a0f565
rename njs_ev_data_t to njs_runtime_t
Thinker K.F. Li <thinker@branda.to>
parents:
550
diff
changeset
|
253 njs_runtime_t * |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
254 njs_mb_new(char *display_name, int w, int h) { |
552 | 255 njs_runtime_t *rt; |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
256 mb_rt_t *mb_rt; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
753
diff
changeset
|
257 |
552 | 258 rt = (njs_runtime_t *)malloc(sizeof(njs_runtime_t)); |
259 ASSERT(rt != NULL); | |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
260 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
261 mb_rt = mb_runtime_new(display_name, w, h); |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
262 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
263 rt->mb_rt = mb_rt; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
753
diff
changeset
|
264 |
552 | 265 return rt; |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
266 } |
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
267 |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
268 /*! \brief Create a njs_runtime_t for an existed window. |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
269 * |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
270 * The njs_runtime_t created by this function must be free by |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
271 * njs_mb_free_keep_win(). |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
272 */ |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
273 njs_runtime_t * |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
274 njs_mb_new_with_win(void *display, long win) { |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
275 njs_runtime_t *rt; |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
276 mb_rt_t *mb_rt; |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
277 |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
278 rt = (njs_runtime_t *)malloc(sizeof(njs_runtime_t)); |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
279 ASSERT(rt != NULL); |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
280 |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
281 mb_rt = mb_runtime_new_with_win((Display *)display, win); |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
282 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
283 rt->mb_rt = mb_rt; |
871
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
284 |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
285 return rt; |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
286 } |
67d0fed24120
Export a function to create a runtime for an existed window for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
287 |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
288 /*! \brief Pass a X event to X runtime. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
289 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
290 void |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
291 njs_mb_handle_single_event(njs_runtime_t *rt, void *evt) { |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
292 #if 0 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
293 void *mb_rt = rt->mb_rt; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
294 extern void _X_MB_handle_single_event(void *rt, void *evt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
295 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
296 _X_MB_handle_single_event(mb_rt, evt); |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
297 #endif |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
298 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
299 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
300 /*! \brief Called at end of an iteration of event loop. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
301 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
302 void |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
303 njs_mb_no_more_event(njs_runtime_t *rt) { |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
304 #if 0 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
305 mb_rt_t *mb_rt = rt->mb_rt; |
1039 | 306 extern void _X_MB_no_more_event(mb_rt_t *rt); |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
307 |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
308 _X_MB_no_more_event(mb_rt); |
1042
18256f404193
nodejs binding passes compiling
Thinker K.F. Li <thinker@codemud.net>
parents:
1040
diff
changeset
|
309 #endif |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
310 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
311 |
553
0a77b88500bf
rename _X_njs_MB_get_runtime to _X_njs_MB_get_X_runtime
Thinker K.F. Li <thinker@branda.to>
parents:
552
diff
changeset
|
312 /*! \brief Get X runtime that is backend of this njs runtime. |
0a77b88500bf
rename _X_njs_MB_get_runtime to _X_njs_MB_get_X_runtime
Thinker K.F. Li <thinker@branda.to>
parents:
552
diff
changeset
|
313 */ |
1039 | 314 mb_rt_t * |
1053
df6ee4568ca2
Rename X_njs_MB_* to njs_mb_* for nodejs plugin.
Thinker K.F. Li <thinker@codemud.net>
parents:
1042
diff
changeset
|
315 _njs_mb_get_runtime(njs_runtime_t *rt) { |
1055
1375aa8629ac
Rename njs_runtime_t::xrt to njs_runtime_t::mb_rt
Thinker K.F. Li <thinker@codemud.net>
parents:
1054
diff
changeset
|
316 return rt->mb_rt; |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
546
diff
changeset
|
317 } |