1
0
Fork 0
mirror of git://git.psyced.org/git/psyclpc synced 2024-08-15 03:20:16 +00:00

glue to enable optional psyc parsers for each lpc object

This commit is contained in:
psyc://psyced.org/~lynX 2011-05-06 22:15:37 +02:00
parent 394af40eb0
commit 51fea526ac
6 changed files with 40 additions and 9 deletions

View file

@ -522,7 +522,7 @@ simulate.o : ../mudlib/sys/rtlimits.h ../mudlib/sys/regexp.h \
mapping.h main.h lex.h heartbeat.h gcollect.h filestat.h ed.h comm.h \ mapping.h main.h lex.h heartbeat.h gcollect.h filestat.h ed.h comm.h \
closure.h call_out.h backend.h array.h actions.h simulate.h my-alloca.h \ closure.h call_out.h backend.h array.h actions.h simulate.h my-alloca.h \
typedefs.h driver.h interpret.h hash.h exec.h ptrtable.h bytecode.h \ typedefs.h driver.h interpret.h hash.h exec.h ptrtable.h bytecode.h \
port.h config.h hosts/unix.h hosts/be/be.h machine.h port.h config.h hosts/unix.h hosts/be/be.h machine.h pkg-psyc.o
sprintf.o : xalloc.h swap.h svalue.h structs.h stdstrings.h simul_efun.h \ sprintf.o : xalloc.h swap.h svalue.h structs.h stdstrings.h simul_efun.h \
simulate.h sent.h random.h ptrtable.h object.h mstrings.h mapping.h \ simulate.h sent.h random.h ptrtable.h object.h mstrings.h mapping.h \

View file

@ -29,7 +29,6 @@
# include <fcntl.h> # include <fcntl.h>
# include <psyc.h> # include <psyc.h>
# include <psyc/parser.h>
# include <psyc/render.h> # include <psyc/render.h>
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
@ -127,7 +126,7 @@ f_psyc_parse (svalue_t *sp) {
} }
else if (sp->type == T_STRING) { else if (sp->type == T_STRING) {
printf("\npsyc_parse got a %d bytes long string...\n", mstrsize(sp->u.str)); printf("\npsyc_parse got a %d bytes long string...\n", mstrsize(sp->u.str));
psyc_nextParseBuffer(&state, psyc_newString(get_txt(sp->u.str), psyc_setParseBuffer(&state, psyc_newString(get_txt(sp->u.str),
mstrsize(sp->u.str))); mstrsize(sp->u.str)));
} }
@ -176,7 +175,7 @@ f_psyc_parse (svalue_t *sp) {
{ {
write(1, ">>> LIST START\n", 15); write(1, ">>> LIST START\n", 15);
psyc_initParseListState(&listState); psyc_initParseListState(&listState);
psyc_nextParseListBuffer(&listState, value); psyc_setParseListBuffer(&listState, value);
while ((ret = psyc_parseList(&listState, &name, &value, &elem))) while ((ret = psyc_parseList(&listState, &name, &value, &elem)))
{ {
switch (ret) switch (ret)

View file

@ -1,10 +1,20 @@
#ifdef USE_PSYC
/* pkg-psyc takes and produces PSYC packets in form /* pkg-psyc takes and produces PSYC packets in form
* of an array of mapping, mapping, string and string * of an array of mapping, mapping, string and string
* or int* where necessary. * or int* where necessary.
*/ */
#define PSYC_ROUTING 0 # define PSYC_ROUTING 0
#define PSYC_ENTITY 1 # define PSYC_ENTITY 1
#define PSYC_METHOD 2 # define PSYC_METHOD 2
#define PSYC_BODY 3 # define PSYC_BODY 3
# include <psyc/parser.h>
static inline void
psyc_free_parser (psycParseState *ps) {
/* if (ps) xfree((void *) ps); */
}
#endif

View file

@ -43,6 +43,10 @@
#include "driver.h" #include "driver.h"
#include "typedefs.h" #include "typedefs.h"
#ifdef USE_PSYC
# include <psyc/parser.h>
#endif
enum sent_type_e { enum sent_type_e {
SENT_PLAIN = 0 /* Normal action */ SENT_PLAIN = 0 /* Normal action */
, SENT_SHORT_VERB /* Action with abbreviatable verb */ , SENT_SHORT_VERB /* Action with abbreviatable verb */
@ -127,6 +131,9 @@ struct shadow_s
ed_buffer_t *ed_buffer; /* the editor buffer, if needed */ ed_buffer_t *ed_buffer; /* the editor buffer, if needed */
#endif #endif
interactive_t *ip; /* the information for interactive objects */ interactive_t *ip; /* the information for interactive objects */
#ifdef USE_PSYC
psycParseState *psyc_parser; /* in case this objects parses PSYC data */
#endif
}; };
/* --- Macros --- */ /* --- Macros --- */
@ -134,6 +141,7 @@ struct shadow_s
#define O_GET_SHADOW(ob) ((shadow_t *)(ob)->sent) #define O_GET_SHADOW(ob) ((shadow_t *)(ob)->sent)
#define O_GET_INTERACTIVE(ob) (O_GET_SHADOW(ob)->ip) #define O_GET_INTERACTIVE(ob) (O_GET_SHADOW(ob)->ip)
#define O_GET_EDBUFFER(ob) (O_GET_SHADOW(ob)->ed_buffer) #define O_GET_EDBUFFER(ob) (O_GET_SHADOW(ob)->ed_buffer)
#define O_GET_PSYC_PARSER(ob) (O_GET_SHADOW(ob)->psyc_parser)
/* Expand to an expression suitable to query or set the /* Expand to an expression suitable to query or set the
* indicated attribute. No checks are performed. * indicated attribute. No checks are performed.

View file

@ -58,6 +58,9 @@
#ifdef USE_SQLITE #ifdef USE_SQLITE
#include "pkg-sqlite.h" #include "pkg-sqlite.h"
#endif #endif
#ifdef USE_PSYC
#include "pkg-psyc.h"
#endif
#include "prolang.h" #include "prolang.h"
#include "sent.h" #include "sent.h"
#include "simul_efun.h" #include "simul_efun.h"
@ -2698,6 +2701,11 @@ destruct (object_t *ob)
} }
#endif #endif
#ifdef USE_PSYC
if (shadow_sent->psyc_parser)
psyc_free_parser(shadow_sent->psyc_parser);
#endif
#ifdef USE_SHADOWING #ifdef USE_SHADOWING
/* The chain of shadows is a double linked list. Take care to update /* The chain of shadows is a double linked list. Take care to update
* it correctly. * it correctly.
@ -3173,6 +3181,9 @@ new_shadow_sent(void)
#endif #endif
#ifdef USE_BUILTIN_EDITOR #ifdef USE_BUILTIN_EDITOR
p->ed_buffer = NULL; p->ed_buffer = NULL;
#endif
#ifdef USE_PSYC
p->psyc_parser = NULL;
#endif #endif
p->ip = NULL; p->ip = NULL;
return p; return p;
@ -3215,6 +3226,9 @@ check_shadow_sent (object_t *ob)
#ifdef USE_BUILTIN_EDITOR #ifdef USE_BUILTIN_EDITOR
&& !sh->ed_buffer && !sh->ed_buffer
#endif #endif
#ifdef USE_PSYC
&& !sh->psyc_parser
#endif
#ifdef USE_SHADOWING #ifdef USE_SHADOWING
&& !sh->shadowing && !sh->shadowing
&& !sh->shadowed_by && !sh->shadowed_by

View file

@ -17,7 +17,7 @@ version_longtype="stable"
# A timestamp, to be used by bumpversion and other scripts. # A timestamp, to be used by bumpversion and other scripts.
# It can be used, for example, to 'touch' this file on every build, thus # It can be used, for example, to 'touch' this file on every build, thus
# forcing revision control systems to add it on every checkin automatically. # forcing revision control systems to add it on every checkin automatically.
version_stamp="Fri May 6 21:14:39 CEST 2011" version_stamp="Fri May 6 22:13:45 CEST 2011"
# Okay, LDMUD is using 3.x.x so to avoid conflicts let's just use 4.x.x # Okay, LDMUD is using 3.x.x so to avoid conflicts let's just use 4.x.x
version_major=4 version_major=4