Version 0.2.0 from FTP
authorMark Spencer <markster@digium.com>
Tue, 6 Aug 2002 13:43:04 +0000 (13:43 +0000)
committerMark Spencer <markster@digium.com>
Tue, 6 Aug 2002 13:43:04 +0000 (13:43 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@499 65c4cc65-6c06-0410-ace0-fbb531ad65f3

say.c

diff --git a/say.c b/say.c
index baa30c7..9cfdfc4 100755 (executable)
--- a/say.c
+++ b/say.c
@@ -51,7 +51,7 @@ int ast_say_number(struct ast_channel *chan, int num, char *ints, char *language
        } else {
                /* Use english numbers */
                language = "en";
-               while(num && !res) {
+               while(!res && (num || playh)) {
                        if (playh) {
                                snprintf(fn, sizeof(fn), "digits/hundred");
                                playh = 0;
@@ -100,3 +100,200 @@ int ast_say_number(struct ast_channel *chan, int num, char *ints, char *language
        }
        return res;
 }
+
+int ast_say_date(struct ast_channel *chan, time_t t, char *ints, char *lang)
+{
+       struct tm *tm;
+       char fn[256];
+       int res = 0;
+       tm = localtime(&t);
+       if (!tm) {
+               ast_log(LOG_WARNING, "Unable to derive local time\n");
+               return -1;
+       }
+       if (!res) {
+               snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday);
+               res = ast_streamfile(chan, fn, lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (!res) {
+               snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon);
+               res = ast_streamfile(chan, fn, lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (!res)
+               res = ast_say_number(chan, tm->tm_mday, ints, lang);
+
+       if (!res)
+               res = ast_waitstream(chan, ints);
+       if (!res)
+               res = ast_say_number(chan, tm->tm_year + 1900, ints, lang);
+       return res;
+}
+
+int ast_say_time(struct ast_channel *chan, time_t t, char *ints, char *lang)
+{
+       struct tm *tm;
+       int res = 0;
+       int hour, pm=0;
+       tm = localtime(&t);
+       if (!tm) {
+               ast_log(LOG_WARNING, "Unable to derive local time\n");
+               return -1;
+       }
+       hour = tm->tm_hour;
+       if (!hour)
+               hour = 12;
+       else if (hour == 12)
+               pm = 1;
+       else if (hour > 12) {
+               hour -= 12;
+               pm = 1;
+       }
+       if (!res)
+               res = ast_say_number(chan, hour, ints, lang);
+
+       if (tm->tm_min > 9) {
+               if (!res)
+                       res = ast_say_number(chan, tm->tm_min, ints, lang);
+       } else if (tm->tm_min) {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/oh", lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+               if (!res)
+                       res = ast_say_number(chan, tm->tm_min, ints, lang);
+       } else {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/oclock", lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (pm) {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/p-m", lang);
+       } else {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/a-m", lang);
+       }
+       if (!res)
+               res = ast_waitstream(chan, ints);
+       return res;
+}
+
+int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang)
+{
+       struct tm *tm;
+       char fn[256];
+       int res = 0;
+       int hour, pm=0;
+       tm = localtime(&t);
+       if (!tm) {
+               ast_log(LOG_WARNING, "Unable to derive local time\n");
+               return -1;
+       }
+       if (!res) {
+               snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday);
+               res = ast_streamfile(chan, fn, lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (!res) {
+               snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon);
+               res = ast_streamfile(chan, fn, lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (!res)
+               res = ast_say_number(chan, tm->tm_mday, ints, lang);
+
+       hour = tm->tm_hour;
+       if (!hour)
+               hour = 12;
+       else if (hour == 12)
+               pm = 1;
+       else if (hour > 12) {
+               hour -= 12;
+               pm = 1;
+       }
+       if (!res)
+               res = ast_say_number(chan, hour, ints, lang);
+
+       if (tm->tm_min > 9) {
+               if (!res)
+                       res = ast_say_number(chan, tm->tm_min, ints, lang);
+       } else if (tm->tm_min) {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/oh", lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+               if (!res)
+                       res = ast_say_number(chan, tm->tm_min, ints, lang);
+       } else {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/oclock", lang);
+               if (!res)
+                       res = ast_waitstream(chan, ints);
+       }
+       if (pm) {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/p-m", lang);
+       } else {
+               if (!res)
+                       res = ast_streamfile(chan, "digits/a-m", lang);
+       }
+       if (!res)
+               res = ast_waitstream(chan, ints);
+       if (!res)
+               res = ast_say_number(chan, tm->tm_year + 1900, ints, lang);
+       return res;
+}
+
+int ast_say_datetime_from_now(struct ast_channel *chan, time_t t, char *ints, char *lang)
+{
+       int res=0;
+       time_t nowt;
+       int daydiff;
+       struct tm *tm;
+       struct tm tm2;
+       struct tm *now;
+       char fn[256];
+
+       time(&nowt);
+
+       tm = localtime(&t);
+       if (!tm) {
+               ast_log(LOG_WARNING, "Unable to derive local time\n");
+               return -1;
+       }
+       memcpy(&tm2, tm, sizeof(struct tm));
+       tm = &tm2;
+       now = localtime(&nowt);
+       daydiff = now->tm_yday - tm->tm_yday;
+       if ((daydiff < 0) || (daydiff > 6)) {
+               /* Day of month and month */
+               if (!res) {
+                       snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon);
+                       res = ast_streamfile(chan, fn, lang);
+                       if (!res)
+                               res = ast_waitstream(chan, ints);
+               }
+               if (!res)
+                       res = ast_say_number(chan, tm->tm_mday, ints, lang);
+
+       } else if (daydiff) {
+               /* Just what day of the week */
+               if (!res) {
+                       snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday);
+                       res = ast_streamfile(chan, fn, lang);
+                       if (!res)
+                               res = ast_waitstream(chan, ints);
+               }
+       } /* Otherwise, it was today */
+       if (!res)
+               res = ast_say_time(chan, t, ints, lang);
+       return res;
+}
+