… | |
… | |
136 | inline SV *to_sv (unsigned long v) { return newSVuv (v); } |
136 | inline SV *to_sv (unsigned long v) { return newSVuv (v); } |
137 | inline SV *to_sv ( signed long long v) { return newSVval64 (v); } |
137 | inline SV *to_sv ( signed long long v) { return newSVval64 (v); } |
138 | inline SV *to_sv (unsigned long long v) { return newSVval64 (v); } |
138 | inline SV *to_sv (unsigned long long v) { return newSVval64 (v); } |
139 | inline SV *to_sv (float v) { return newSVnv (v); } |
139 | inline SV *to_sv (float v) { return newSVnv (v); } |
140 | inline SV *to_sv (double v) { return newSVnv (v); } |
140 | inline SV *to_sv (double v) { return newSVnv (v); } |
|
|
141 | inline SV *to_sv (client_socket *v) { return newSVattachable (v, "cf::client_socket::wrap"); } |
141 | inline SV *to_sv (player * v) { return newSVattachable (v, "cf::player::wrap"); } |
142 | inline SV *to_sv (player * v) { return newSVattachable (v, "cf::player::wrap"); } |
142 | inline SV *to_sv (object * v) { return newSVattachable (v, v && v->type == PLAYER ? "cf::object::player::wrap" : "cf::object::wrap"); } |
143 | inline SV *to_sv (object * v) { return newSVattachable (v, v && v->type == PLAYER ? "cf::object::player::wrap" : "cf::object::wrap"); } |
143 | inline SV *to_sv (maptile * v) { return newSVattachable (v, "cf::map::wrap"); } |
144 | inline SV *to_sv (maptile * v) { return newSVattachable (v, "cf::map::wrap"); } |
144 | inline SV *to_sv (archetype * v) { return newSVptr (v, "cf::arch::wrap"); } |
145 | inline SV *to_sv (archetype * v) { return newSVptr (v, "cf::arch::wrap"); } |
145 | inline SV *to_sv (partylist * v) { return newSVptr (v, "cf::party::wrap"); } |
146 | inline SV *to_sv (partylist * v) { return newSVptr (v, "cf::party::wrap"); } |
… | |
… | |
173 | inline void sv_to (SV *sv, unsigned long &v) { v = SvUV (sv); } |
174 | inline void sv_to (SV *sv, unsigned long &v) { v = SvUV (sv); } |
174 | inline void sv_to (SV *sv, signed long long &v) { v = ( signed long long)SvVAL64 (sv); } |
175 | inline void sv_to (SV *sv, signed long long &v) { v = ( signed long long)SvVAL64 (sv); } |
175 | inline void sv_to (SV *sv, unsigned long long &v) { v = (unsigned long long)SvVAL64 (sv); } |
176 | inline void sv_to (SV *sv, unsigned long long &v) { v = (unsigned long long)SvVAL64 (sv); } |
176 | inline void sv_to (SV *sv, float &v) { v = SvNV (sv); } |
177 | inline void sv_to (SV *sv, float &v) { v = SvNV (sv); } |
177 | inline void sv_to (SV *sv, double &v) { v = SvNV (sv); } |
178 | inline void sv_to (SV *sv, double &v) { v = SvNV (sv); } |
|
|
179 | inline void sv_to (SV *sv, client_socket *&v) { v = (client_socket *)SvPTR_ornull (sv, "cf::client_socket"); } |
178 | inline void sv_to (SV *sv, player * &v) { v = (player *)SvPTR_ornull (sv, "cf::player"); } |
180 | inline void sv_to (SV *sv, player * &v) { v = (player *)SvPTR_ornull (sv, "cf::player"); } |
179 | inline void sv_to (SV *sv, object * &v) { v = (object *)SvPTR_ornull (sv, "cf::object"); } |
181 | inline void sv_to (SV *sv, object * &v) { v = (object *)SvPTR_ornull (sv, "cf::object"); } |
180 | inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)SvPTR_ornull (sv, "cf::arch"); } |
182 | inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)SvPTR_ornull (sv, "cf::arch"); } |
181 | inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)SvPTR_ornull (sv, "cf::map"); } |
183 | inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)SvPTR_ornull (sv, "cf::map"); } |
182 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
184 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
… | |
… | |
239 | break; |
241 | break; |
240 | |
242 | |
241 | case DT_MAP: |
243 | case DT_MAP: |
242 | // va_arg (object *) when void * is passed is an XSI extension |
244 | // va_arg (object *) when void * is passed is an XSI extension |
243 | sv = to_sv (va_arg (ap, maptile *)); |
245 | sv = to_sv (va_arg (ap, maptile *)); |
|
|
246 | break; |
|
|
247 | |
|
|
248 | case DT_SOCKET: |
|
|
249 | sv = to_sv (va_arg (ap, client_socket *)); |
244 | break; |
250 | break; |
245 | |
251 | |
246 | case DT_PLAYER: |
252 | case DT_PLAYER: |
247 | sv = to_sv (va_arg (ap, player *)); |
253 | sv = to_sv (va_arg (ap, player *)); |
248 | break; |
254 | break; |
… | |
… | |
309 | } |
315 | } |
310 | |
316 | |
311 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
317 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
312 | |
318 | |
313 | SV * |
319 | SV * |
314 | registry_of (attachable_base *ext) |
320 | registry (attachable_base *ext) |
315 | { |
321 | { |
316 | if (!ext->cb) |
322 | if (!ext->cb) |
317 | ext->cb = newAV (); |
323 | ext->cb = newAV (); |
318 | |
324 | |
319 | return newRV_inc ((SV *)ext->cb); |
325 | return newRV_inc ((SV *)ext->cb); |
… | |
… | |
1733 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
1739 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
1734 | RETVAL = INVOKE_((event_type)event, ARG_OBJECT (op), ARG_AV (av)); |
1740 | RETVAL = INVOKE_((event_type)event, ARG_OBJECT (op), ARG_AV (av)); |
1735 | OUTPUT: RETVAL |
1741 | OUTPUT: RETVAL |
1736 | |
1742 | |
1737 | SV *registry (object *op) |
1743 | SV *registry (object *op) |
1738 | CODE: |
|
|
1739 | RETVAL = registry_of (op); |
|
|
1740 | OUTPUT: |
|
|
1741 | RETVAL |
|
|
1742 | |
1744 | |
1743 | void mortals () |
1745 | void mortals () |
1744 | PPCODE: |
1746 | PPCODE: |
1745 | EXTEND (SP, object::mortals.size ()); |
1747 | EXTEND (SP, object::mortals.size ()); |
1746 | for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) |
1748 | for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) |
… | |
… | |
2034 | int command_banish (object *op, char *params) |
2036 | int command_banish (object *op, char *params) |
2035 | |
2037 | |
2036 | |
2038 | |
2037 | MODULE = cf PACKAGE = cf::player PREFIX = cf_player_ |
2039 | MODULE = cf PACKAGE = cf::player PREFIX = cf_player_ |
2038 | |
2040 | |
2039 | INCLUDE: $PERL genacc player ../include/newserver.h ../include/player.h | |
2041 | INCLUDE: $PERL genacc player ../include/player.h | |
2040 | |
2042 | |
2041 | char * |
2043 | char * |
2042 | client (player *pl) |
2044 | client (player *pl) |
2043 | CODE: |
2045 | CODE: |
2044 | RETVAL = pl->socket->client; |
2046 | RETVAL = pl->socket->client; |
… | |
… | |
2059 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
2061 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
2060 | RETVAL = INVOKE_((event_type)event, ARG_PLAYER (pl), ARG_AV (av)); |
2062 | RETVAL = INVOKE_((event_type)event, ARG_PLAYER (pl), ARG_AV (av)); |
2061 | OUTPUT: RETVAL |
2063 | OUTPUT: RETVAL |
2062 | |
2064 | |
2063 | SV *registry (player *pl) |
2065 | SV *registry (player *pl) |
2064 | CODE: |
|
|
2065 | RETVAL = registry_of (pl); |
|
|
2066 | OUTPUT: |
|
|
2067 | RETVAL |
|
|
2068 | |
2066 | |
2069 | player *cf_player_find (char *name) |
2067 | player *cf_player_find (char *name) |
2070 | PROTOTYPE: $ |
2068 | PROTOTYPE: $ |
2071 | |
2069 | |
2072 | void cf_player_move (player *pl, int dir) |
2070 | void cf_player_move (player *pl, int dir) |
… | |
… | |
2176 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
2174 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
2177 | RETVAL = INVOKE_((event_type)event, ARG_MAP (map), ARG_AV (av)); |
2175 | RETVAL = INVOKE_((event_type)event, ARG_MAP (map), ARG_AV (av)); |
2178 | OUTPUT: RETVAL |
2176 | OUTPUT: RETVAL |
2179 | |
2177 | |
2180 | SV *registry (maptile *map) |
2178 | SV *registry (maptile *map) |
2181 | CODE: |
|
|
2182 | RETVAL = registry_of (map); |
|
|
2183 | OUTPUT: |
|
|
2184 | RETVAL |
|
|
2185 | |
2179 | |
2186 | INCLUDE: $PERL genacc maptile ../include/map.h | |
2180 | INCLUDE: $PERL genacc maptile ../include/map.h | |
2187 | |
2181 | |
2188 | maptile *new (int width, int height) |
2182 | maptile *new (int width, int height) |
2189 | PROTOTYPE: |
2183 | PROTOTYPE: |
… | |
… | |
2396 | |
2390 | |
2397 | MODULE = cf PACKAGE = cf::settings |
2391 | MODULE = cf PACKAGE = cf::settings |
2398 | |
2392 | |
2399 | INCLUDE: $PERL genacc Settings ../include/global.h | |
2393 | INCLUDE: $PERL genacc Settings ../include/global.h | |
2400 | |
2394 | |
|
|
2395 | MODULE = cf PACKAGE = cf::client_socket |
|
|
2396 | |
|
|
2397 | INCLUDE: $PERL genacc client_socket ../include/newserver.h | |
|
|
2398 | |
|
|
2399 | int invoke (client_socket *ns, int event, ...) |
|
|
2400 | CODE: |
|
|
2401 | if (KLASS_OF (event) != KLASS_SOCKET) croak ("event class must be SOCKET"); |
|
|
2402 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
|
|
2403 | for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); |
|
|
2404 | RETVAL = INVOKE_((event_type)event, ARG_SOCKET (ns), ARG_AV (av)); |
|
|
2405 | OUTPUT: RETVAL |
|
|
2406 | |
|
|
2407 | SV *registry (client_socket *ns) |
|
|
2408 | |