ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.18 by root, Mon Aug 28 07:07:42 2006 UTC vs.
Revision 1.20 by root, Mon Aug 28 14:05:24 2006 UTC

59 59
60typedef double val64; 60typedef double val64;
61#define newSVval64 newSVnv 61#define newSVval64 newSVnv
62#define SvVAL64 SvNV 62#define SvVAL64 SvNV
63 63
64static f_plug_api gethook; 64static f_plug_api gethook = cfapi_get_hooks;
65static f_plug_api systemDirectory; 65static f_plug_api object_set_property = cfapi_object_set_property;
66static f_plug_api object_set_property; 66static f_plug_api map_get_map = cfapi_map_get_map;
67static f_plug_api map_get_map; 67static f_plug_api object_insert = cfapi_object_insert;
68static f_plug_api object_insert;
69 68
70/* this is a stupid way to do things, and awkward to use for plug-in authors */ 69/* this is a stupid way to do things, and awkward to use for plug-in authors */
71typedef struct 70typedef struct
72{ 71{
73 object* who; 72 object* who;
392 if (obj->self) 391 if (obj->self)
393 reattach (subclass::get_dt (), (subclass *)obj); 392 reattach (subclass::get_dt (), (subclass *)obj);
394} 393}
395 394
396object_freezer::object_freezer (const char *filename) 395object_freezer::object_freezer (const char *filename)
397: filename (filename)
398{ 396{
397 this->filename = (SV *)newSVpv (filename, 0);
398
399 char filename2 [4096];
400 snprintf (filename2, 4096, "%s~", filename);
401
402 fp = fopen (filename2, "w");
403
404 if (!fp)
405 LOG (llevError, "cannot open file '%s' for writing: %s\n", filename2, strerror (errno));
406
399 av = (AV *)newAV (); 407 av = (AV *)newAV ();
400} 408}
401 409
402object_freezer::~object_freezer () 410object_freezer::~object_freezer ()
403{ 411{
412 if (fp)
413 {
414 fclose (fp);
415
404 dSP; 416 dSP;
405 ENTER; 417 ENTER;
406 SAVETMPS; 418 SAVETMPS;
407 PUSHMARK (SP); 419 PUSHMARK (SP);
408 XPUSHs (sv_2mortal (newSVpv (filename, 0))); 420 XPUSHs (sv_2mortal ((SV *)filename));
409 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av))); 421 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
410 PUTBACK; 422 PUTBACK;
411 call_pv ("cf::object_freezer_save", G_VOID | G_DISCARD | G_EVAL); 423 call_pv ("cf::object_freezer_save", G_VOID | G_DISCARD | G_EVAL);
412 FREETMPS; 424 FREETMPS;
413 LEAVE; 425 LEAVE;
426 }
427 else
428 SvREFCNT_dec ((SV *)filename);
414} 429}
415 430
416void object_freezer::put (FILE *fp, attachable_base *ext) 431void object_freezer::put (attachable_base *ext)
417{ 432{
418 ext->optimise (); 433 ext->optimise ();
419 434
420 if (ext->self) 435 if (ext->self)
421 { 436 {
423 av_store ((AV *)av, idx, SvREFCNT_inc ((SV *)ext->self)); 438 av_store ((AV *)av, idx, SvREFCNT_inc ((SV *)ext->self));
424 fprintf (fp, "oid %d\n", idx); 439 fprintf (fp, "oid %d\n", idx);
425 } 440 }
426} 441}
427 442
428object_thawer::object_thawer (const char *filename) 443object_thawer::object_thawer (FILE *fp, const char *filename)
429{ 444{
445 this->fp = fp;
430 av = 0; 446 av = 0;
431 447
432 if (!filename) 448 if (!filename)
433 return; 449 return;
434 450
473 reattach (type, obj); 489 reattach (type, obj);
474} 490}
475 491
476object_thawer::~object_thawer () 492object_thawer::~object_thawer ()
477{ 493{
478 if (av)
479 SvREFCNT_dec ((SV *)av); 494 if (av) SvREFCNT_dec ((AV *)av);
480} 495}
481 496
482///////////////////////////////////////////////////////////////////////////// 497/////////////////////////////////////////////////////////////////////////////
483 498
484extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 499extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
485{ 500{
486 gethook = gethooksptr;
487
488 return 0; 501 return 0;
489} 502}
490 503
491static CommArray_s rtn_cmd; 504static CommArray_s rtn_cmd;
492 505
571 584
572extern "C" int cfperl_postInitPlugin () 585extern "C" int cfperl_postInitPlugin ()
573{ 586{
574 int hooktype = 1; 587 int hooktype = 1;
575 int rtype = 0; 588 int rtype = 0;
576
577 systemDirectory = (void* (*)(int*, ...)) gethook (&rtype, hooktype, "cfapi_system_directory");
578 object_set_property = (void* (*)(int*, ...)) gethook (&rtype, hooktype, "cfapi_object_set_property");
579 map_get_map = (void* (*)(int*, ...)) gethook (&rtype, hooktype, "cfapi_map_get_map");
580 object_insert = (void* (*)(int*, ...)) gethook (&rtype, hooktype, "cfapi_object_insert");
581 589
582 cf_init_plugin (gethook); 590 cf_init_plugin (gethook);
583 591
584 return 0; 592 return 0;
585} 593}
1521 PROTOTYPE: $$ 1529 PROTOTYPE: $$
1522 1530
1523char *path_combine_and_normalize (char *base, char *path) 1531char *path_combine_and_normalize (char *base, char *path)
1524 PROTOTYPE: $$ 1532 PROTOTYPE: $$
1525 1533
1526char * 1534const char *
1527cf_get_maps_directory (char *path) 1535get_maps_directory (char *path)
1528 PROTOTYPE: $ 1536 PROTOTYPE: $
1529 ALIAS: maps_directory = 0 1537 ALIAS: maps_directory = 0
1538 CODE:
1539 RETVAL = create_pathname (path);
1540 OUTPUT: RETVAL
1530 1541
1531void 1542void
1532sub_generation_inc () 1543sub_generation_inc ()
1533 CODE: 1544 CODE:
1534 PL_sub_generation++; 1545 PL_sub_generation++;
1543 confdir = 3 1554 confdir = 3
1544 localdir = 4 1555 localdir = 4
1545 playerdir = 5 1556 playerdir = 5
1546 datadir = 6 1557 datadir = 6
1547 CODE: 1558 CODE:
1548{ 1559 switch (ix)
1549 int unused_type; 1560 {
1550 RETVAL = (char *)systemDirectory (&unused_type, ix); 1561 case 0: RETVAL = settings.mapdir ; break;
1551} 1562 case 1: RETVAL = settings.uniquedir; break;
1563 case 2: RETVAL = settings.tmpdir ; break;
1564 case 3: RETVAL = settings.confdir ; break;
1565 case 4: RETVAL = settings.localdir ; break;
1566 case 5: RETVAL = settings.playerdir; break;
1567 case 6: RETVAL = settings.datadir ; break;
1568 }
1552 OUTPUT: RETVAL 1569 OUTPUT: RETVAL
1553 1570
1554int 1571int
1555cf_find_animation (char *text) 1572cf_find_animation (char *text)
1556 PROTOTYPE: $ 1573 PROTOTYPE: $
2154cf_map_normalise (mapstruct *map, int x, int y) 2171cf_map_normalise (mapstruct *map, int x, int y)
2155 PPCODE: 2172 PPCODE:
2156{ 2173{
2157 mapstruct *nmap = 0; 2174 mapstruct *nmap = 0;
2158 I16 nx = 0, ny = 0; 2175 I16 nx = 0, ny = 0;
2159 int flags = cf_map_get_flags (map, &nmap, x, y, &nx, &ny); 2176 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2160 2177
2161 EXTEND (SP, 4); 2178 EXTEND (SP, 4);
2162 PUSHs (sv_2mortal (newSViv (flags))); 2179 PUSHs (sv_2mortal (newSViv (flags)));
2163 2180
2164 if (GIMME_V == G_ARRAY) 2181 if (GIMME_V == G_ARRAY)
2176{ 2193{
2177 object *o; 2194 object *o;
2178 mapstruct *nmap = 0; 2195 mapstruct *nmap = 0;
2179 I16 nx, ny; 2196 I16 nx, ny;
2180 2197
2181 cf_map_get_flags (map, &nmap, x, y, &nx, &ny); 2198 get_map_flags (map, &nmap, x, y, &nx, &ny);
2182 2199
2183 if (nmap) 2200 if (nmap)
2184 for (o = GET_MAP_OB (nmap, nx, ny); o; o = o->above) 2201 for (o = GET_MAP_OB (nmap, nx, ny); o; o = o->above)
2185 XPUSHs (sv_2mortal (newSVcfapi (CFAPI_POBJECT, o))); 2202 XPUSHs (sv_2mortal (newSVcfapi (CFAPI_POBJECT, o)));
2186} 2203}
2245 } 2262 }
2246 } 2263 }
2247} 2264}
2248 2265
2249 2266
2250MODULE = cf PACKAGE = cf::arch PREFIX = cf_archetype_ 2267MODULE = cf PACKAGE = cf::arch
2251 2268
2252archetype *cf_archetype_get_first() 2269archetype *first()
2253 PROTOTYPE: 2270 PROTOTYPE:
2254 ALIAS: first = 0 2271 CODE:
2272 RETVAL = first_archetype;
2273 OUTPUT: RETVAL
2255 2274
2256archetype *cf_archetype_get_next (archetype *arch) 2275archetype *next (archetype *arch)
2257 ALIAS: next = 0 2276 CODE:
2277 RETVAL = arch->next;
2278 OUTPUT: RETVAL
2258 2279
2259archetype *cf_archetype_get_head (archetype *arch) 2280archetype *head (archetype *arch)
2260 ALIAS: head = 0 2281 CODE:
2282 RETVAL = arch->head;
2283 OUTPUT: RETVAL
2261 2284
2262archetype *cf_archetype_get_more (archetype *arch) 2285archetype *more (archetype *arch)
2263 ALIAS: more = 0 2286 CODE:
2287 RETVAL = arch->more;
2288 OUTPUT: RETVAL
2264 2289
2265const char *cf_archetype_get_name (archetype *arch) 2290const char *name (archetype *arch)
2266 ALIAS: name = 0 2291 CODE:
2292 RETVAL = arch->name;
2293 OUTPUT: RETVAL
2267 2294
2268object *cf_archetype_get_clone (archetype *arch) 2295object *clone (archetype *arch)
2269 ALIAS: clone = 0 2296 CODE:
2297 RETVAL = &arch->clone;
2298 OUTPUT: RETVAL
2270 2299
2271MODULE = cf PACKAGE = cf::party PREFIX = cf_party_ 2300MODULE = cf PACKAGE = cf::party
2272 2301
2273partylist *cf_party_get_first () 2302partylist *first ()
2274 PROTOTYPE: 2303 PROTOTYPE:
2275 ALIAS: first = 0 2304 CODE:
2305 RETVAL = get_firstparty ();
2306 OUTPUT: RETVAL
2276 2307
2277partylist *cf_party_get_next (partylist *party) 2308partylist *next (partylist *party)
2278 ALIAS: next = 0 2309 CODE:
2310 RETVAL = party->next;
2311 OUTPUT: RETVAL
2279 2312
2280const char *cf_party_get_name (partylist *party) 2313const char *name (partylist *party)
2314 CODE:
2315 RETVAL = party->partyname;
2316 OUTPUT: RETVAL
2281 2317
2282const char *cf_party_get_password (partylist *party) 2318const char *password (partylist *party)
2283 ALIAS: password = 0 2319 CODE:
2320 RETVAL = party->passwd;
2321 OUTPUT: RETVAL
2284 2322
2285player *cf_party_get_first_player (partylist *party) 2323MODULE = cf PACKAGE = cf::region
2286 ALIAS: first_player = 0
2287 2324
2288player *cf_party_get_next_player (partylist *party, player *op) 2325region *first ()
2289 ALIAS: next_player = 0
2290
2291
2292MODULE = cf PACKAGE = cf::region PREFIX = cf_region_
2293
2294region *cf_region_get_first ()
2295 PROTOTYPE: 2326 PROTOTYPE:
2296 ALIAS: first = 0 2327 CODE:
2328 RETVAL = first_region;
2329 OUTPUT: RETVAL
2297 2330
2331region *next (region *reg)
2332 CODE:
2333 RETVAL = reg->next;
2334 OUTPUT: RETVAL
2335
2336const char *name (region *reg)
2337 CODE:
2338 RETVAL = reg->name;
2339 OUTPUT: RETVAL
2340
2341region *parent (region *reg)
2342 CODE:
2343 RETVAL = reg->parent;
2344 OUTPUT: RETVAL
2345
2298const char *cf_region_get_name (region *reg) 2346const char *longname (region *reg)
2299 ALIAS: name = 0 2347 CODE:
2348 RETVAL = reg->longname;
2349 OUTPUT: RETVAL
2300 2350
2301region *cf_region_get_next (region *reg) 2351const char *msg (region *reg)
2302 ALIAS: next = 0 2352 CODE:
2353 RETVAL = reg->msg;
2354 OUTPUT: RETVAL
2303 2355
2304region *cf_region_get_parent (region *reg) 2356MODULE = cf PACKAGE = cf::living
2305 ALIAS: parent = 0
2306
2307const char *cf_region_get_longname (region *reg)
2308 ALIAS: longname = 0
2309
2310const char *cf_region_get_message (region *reg)
2311 ALIAS: message = 0
2312
2313
2314MODULE = cf PACKAGE = cf::living PREFIX = cf_living_
2315 2357
2316val64 2358val64
2317exp (living *liv, val64 new_val = 0) 2359exp (living *liv, val64 new_val = 0)
2318 PROTOTYPE: $;$ 2360 PROTOTYPE: $;$
2319 ALIAS: 2361 ALIAS:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines