Index: apps/app_cut.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_cut.c,v retrieving revision 1.6 diff -u -r1.6 app_cut.c --- apps/app_cut.c 14 Jul 2004 07:22:30 -0000 1.6 +++ apps/app_cut.c 31 Mar 2005 21:59:04 -0000 @@ -169,14 +169,44 @@ return res; } +static char *function_fieldqty(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + char *varname, *varval="", workspace[256]; + char *delim = ast_strdupa(data); + int fieldcount=0; + + if (delim) { + varname = strsep(&delim, "|"); + pbx_retrieve_variable(chan, varname, &varval, workspace, sizeof(workspace), NULL); + while (strsep(&varval, delim)) { + fieldcount++; + } + snprintf(buf, len, "%d", fieldcount); + } else { + ast_log(LOG_ERROR, "Out of memory\n"); + strncpy(buf, "1", len); + } + return buf; +} + +static struct ast_custom_function_obj fieldqty_function = { + .name = "FIELDQTY", + .desc = "Count the fields, with an arbitrary delimiter", + .syntax = "FIELDQTY(,)", + .read = function_fieldqty, + .write = NULL, +}; + int unload_module(void) { STANDARD_HANGUP_LOCALUSERS; + ast_custom_function_unregister(&fieldqty_function); return ast_unregister_application(app_cut); } int load_module(void) { + ast_custom_function_register(&fieldqty_function); return ast_register_application(app_cut, cut_exec, cut_synopsis, cut_descrip); }