Version 0.1.6 from FTP
[asterisk/asterisk.git] / say.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Say numbers and dates (maybe words one day too)
5  * 
6  * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #include <asterisk/file.h>
15 #include <asterisk/channel.h>
16 #include <asterisk/logger.h>
17 #include <asterisk/say.h>
18 #include <stdio.h>
19
20 int ast_say_digit_str(struct ast_channel *chan, char *fn2)
21 {
22         char fn[256] = "";
23         int num = 0;
24         int res = 0;
25         while(fn2[num] && !res) {
26                 snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
27                 res = ast_streamfile(chan, fn);
28                 if (!res) 
29                         res = ast_waitstream(chan, AST_DIGIT_ANY);
30                 ast_stopstream(chan);
31                 num++;
32         }
33         return res;
34 }
35
36 int ast_say_digits(struct ast_channel *chan, int num)
37 {
38         char fn2[256];
39         snprintf(fn2, sizeof(fn2), "%d", num);
40         return ast_say_digit_str(chan, fn2);
41 }
42 int ast_say_number(struct ast_channel *chan, int num)
43 {
44         int res = 0;
45         char fn[256] = "";
46         while(num && !res) {
47                 if (num < 20) {
48                         snprintf(fn, sizeof(fn), "digits/%d", num);
49                         num = 0;
50                 } else
51                 if (num < 100) {
52                         snprintf(fn, sizeof(fn), "digits/%d", (num /10) * 10);
53                         num -= ((num / 10) * 10);
54                 } else {
55                         ast_log(LOG_DEBUG, "Number '%d' is too big for me\n", num);
56                         res = -1;
57                 }
58                 if (!res) {
59                         res = ast_streamfile(chan, fn);
60                         if (!res) 
61                                 res = ast_waitstream(chan, AST_DIGIT_ANY);
62                         ast_stopstream(chan);
63                 }
64                 
65         }
66         return res;
67 }