From e7772acb029d18b7b5079d0117560580d836eb32 Mon Sep 17 00:00:00 2001 From: "psyc://psyced.org/~lynX" <@> Date: Mon, 18 Apr 2011 16:51:54 +0200 Subject: [PATCH] definition of PSYC_text() --- include/psyc.h | 28 ++++++++++++++++++++++++++++ src/match.c | 3 +++ src/render.c | 1 + src/text.c | 2 ++ 4 files changed, 34 insertions(+) create mode 100644 src/render.c create mode 100644 src/text.c diff --git a/include/psyc.h b/include/psyc.h index 040509d..f41c8a2 100644 --- a/include/psyc.h +++ b/include/psyc.h @@ -8,3 +8,31 @@ int PSYC_matches(uint8_t* sho, unsigned int slen, uint8_t* lon, unsigned int llen); +/** @brief Callback for PSYC_text() that produces a value for a match + * + * The application looks up a match such as _fruit from [_fruit] and + * if found writes its current value from its variable store into the + * outgoing buffer.. "Apple" for example. The template returns the + * number of bytes written. 0 is a legal return value. Should the + * callback return -1, PSYC_text leaves the original template text as is. + */ +typedef int (*PSYC_textCB)(uint8_t* match, unsigned int mlen, + uint8_t** buffer, unsigned int* blen); + +/** @brief Fills out text templates by asking a callback for content + * + * Copies the contents of the template into the buffer while looking + * for braceOpen and braceClose strings and calling the callback for + * each enclosed string between these braces. Should the callback + * return -1, the original template text is copied as is. + * + * By default PSYC's "[" and "]" are used but you can provide any other + * brace strings such as "${" and "}" or "". + * + * See also http://about.psyc.eu/psyctext + */ +int PSYC_text(uint8_t* template, unsigned int tlen, + uint8_t** buffer, unsigned int* blen, + PSYC_textCB lookupValue, + char* braceOpen, char* braceClose); + diff --git a/src/match.c b/src/match.c index f80653e..70fb200 100644 --- a/src/match.c +++ b/src/match.c @@ -1,5 +1,7 @@ #include "psyc/lib.h" +/* TODO: PSYC_inherits() */ + int PSYC_matches(uint8_t* sho, unsigned int slen, uint8_t* lon, unsigned int llen) { uint8_t *s, *l, *se, *le; @@ -30,6 +32,7 @@ int PSYC_matches(uint8_t* sho, unsigned int slen, se = sho+slen; le = lon+llen; + /* doesn't always work this way.. FIXME */ *se = *le = '_'; sho++; lon++; while(s = strchr(sho, '_')) { diff --git a/src/render.c b/src/render.c new file mode 100644 index 0000000..595b8e1 --- /dev/null +++ b/src/render.c @@ -0,0 +1 @@ +/* render PSYC packets */ diff --git a/src/text.c b/src/text.c new file mode 100644 index 0000000..1daa789 --- /dev/null +++ b/src/text.c @@ -0,0 +1,2 @@ +/* PSYC_text() */ +