mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Version 0.2.0 from FTP
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@499 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										199
									
								
								say.c
									
									
									
									
									
								
							
							
						
						
									
										199
									
								
								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; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user