diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-30 16:40:38 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-30 16:40:38 +0000 |
commit | e9d15cbea7a98184521c851500176da7aa424012 (patch) | |
tree | d3d6aa7ea86d11ecaa6e88efbc46a5dde1c63ea5 /addons/app_saycountpl.c | |
parent | b85bdd32a783a8f07004d41db8a696645685a331 (diff) |
Move Asterisk-addons modules into the main Asterisk source tree.
Someone asked yesterday, "is there a good reason why we can't just put these
modules in Asterisk?". After a brief discussion, as long as the modules are
clearly set aside in their own directory and not enabled by default, it is
perfectly fine.
For more information about why a module goes in addons, see README-addons.txt.
chan_ooh323 does not currently compile as it is behind some trunk API updates.
However, it will not build by default, so it should be okay for now.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@204413 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'addons/app_saycountpl.c')
-rw-r--r-- | addons/app_saycountpl.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/addons/app_saycountpl.c b/addons/app_saycountpl.c new file mode 100644 index 000000000..fd921de1a --- /dev/null +++ b/addons/app_saycountpl.c @@ -0,0 +1,136 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2004, Andy Powell & TAAN Softworks Corp. + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! + * \file + * \brief Say Polish counting words + * \author Andy Powell + */ + +/*** MODULEINFO + <defaultenabled>no</defaultenabled> + ***/ + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/file.h" +#include "asterisk/logger.h" +#include "asterisk/channel.h" +#include "asterisk/pbx.h" +#include "asterisk/module.h" +#include "asterisk/lock.h" +#include "asterisk/app.h" + +/*** DOCUMENTATION + <application name="SayCountPL" language="en_US"> + <synopsis> + Say Polish counting words. + </synopsis> + <syntax> + <parameter name="word1" required="true" /> + <parameter name="word2" required="true" /> + <parameter name="word5" required="true" /> + <parameter name="number" required="true" /> + </syntax> + <description> + <para>Polish grammar has some funny rules for counting words. for example 1 zloty, + 2 zlote, 5 zlotych. This application will take the words for 1, 2-4 and 5 and + decide based on grammar rules which one to use with the number you pass to it.</para> + <para>Example: SayCountPL(zloty,zlote,zlotych,122) will give: zlote</para> + </description> + </application> + + ***/ +static const char app[] = "SayCountPL"; + +static int saywords(struct ast_channel *chan, char *word1, char *word2, char *word5, int num) +{ + /* Put this in a separate proc because it's bound to change */ + int d = 0; + + if (num > 0) { + if (num % 1000 == 1) { + ast_streamfile(chan, word1, chan->language); + d = ast_waitstream(chan,""); + } else if (((num % 10) >= 2) && ((num % 10) <= 4 ) && ((num % 100) < 10 || (num % 100) > 20)) { + ast_streamfile(chan, word2, chan->language); + d = ast_waitstream(chan, ""); + } else { + ast_streamfile(chan, word5, chan->language); + d = ast_waitstream(chan, ""); + } + } + + return d; +} + + +static int sayword_exec(struct ast_channel *chan, const char *data) +{ + int res = 0; + char *s; + int inum; + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(word1); + AST_APP_ARG(word2); + AST_APP_ARG(word5); + AST_APP_ARG(num); + ); + + if (!data) { + ast_log(LOG_WARNING, "SayCountPL requires 4 arguments: word-1,word-2,word-5,number\n"); + return -1; + } + + s = ast_strdupa(data); + + AST_STANDARD_APP_ARGS(args, s); + + /* Check to see if params passed */ + if (!args.word1 || !args.word2 || !args.word5 || !args.num) { + ast_log(LOG_WARNING, "SayCountPL requires 4 arguments: word-1,word-2,word-3,number\n"); + return -1; + } + + if (sscanf(args.num, "%d", &inum) != 1) { + ast_log(LOG_WARNING, "'%s' is not a valid number\n", args.num); + return -1; + } + + /* do the saying part (after a bit of maths) */ + + res = saywords(chan, args.word1, args.word2, args.word5, inum); + + return res; +} + +static int unload_module(void) +{ + return ast_unregister_application(app); +} + +static int load_module(void) +{ + int res; + + res = ast_register_application_xml(app, sayword_exec); + + return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS; +} + +AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Say polish counting words"); |