diff -u --recursive ./asterisk-1.2.4/apps/app_voicemail.c ./asterisk-1.2.4-vmru/apps/app_voicemail.c --- ./asterisk-1.2.4/apps/app_voicemail.c 2006-01-12 09:14:22.000000000 +0300 +++ ./asterisk-1.2.4-vmru/apps/app_voicemail.c 2006-02-26 19:43:53.000000000 +0300 @@ -4492,6 +4492,111 @@ return res; } +static int get_lastdigits(int num) { + if (num < 20) { + return num; + } else if (num < 100) { + return get_lastdigits(num % 10); + } else if (num < 1000) { + return get_lastdigits(num % 100); + } + return 0; /* number too big */ +} + + +static int vm_intro_ru(struct ast_channel *chan,struct vm_state *vms) +{ + int res; + int lastnum; + int dcnum; + res = ast_play_and_wait(chan, "vm-youhave"); + if (!res) { + lastnum=get_lastdigits(vms->newmessages); + if (vms->newmessages) { + if (vms->newmessages == 1) { + res = ast_play_and_wait(chan, "digits/ru/odno"); + } + else + if((vms->newmessages >20) && (lastnum == 1)){ + dcnum=(vms->newmessages)-lastnum; + res = say_and_wait(chan, dcnum, chan->language); + res = ast_play_and_wait(chan, "odno"); + } + else { + res = say_and_wait(chan, vms->newmessages, chan->language); + } + + if (!res) { + if ((lastnum == 1) && (vms->newmessages != 11)) + res = ast_play_and_wait(chan, "vm-novoe"); + else + res = ast_play_and_wait(chan, "vm-novyh"); + } + + if (vms->oldmessages && !res) + res = ast_play_and_wait(chan, "vm-and"); + else if (!res) { + if ((lastnum == 1) && (vms->newmessages != 11)) + res = ast_play_and_wait(chan, "vm-soobshenie"); + else + if (((vms->newmessages < 10) || (vms->newmessages > 21)) && (lastnum < 5)) + res = ast_play_and_wait(chan, "vm-soobsheniya"); + else + res = ast_play_and_wait(chan, "vm-soobsheniy"); + } + + } + + if (!res && vms->oldmessages) { + lastnum=get_lastdigits(vms->oldmessages); + + if ((vms->oldmessages == 1)) { + res = ast_play_and_wait(chan, "digits/ru/odno"); + } + else + if((vms->oldmessages >20) && (lastnum == 1)) + { + dcnum=vms->oldmessages-lastnum; + res = say_and_wait(chan, dcnum, chan->language); + res = ast_play_and_wait(chan, "odno"); + } + else + { + res = say_and_wait(chan, vms->oldmessages, chan->language); + } + + + if (!res) { + if ((lastnum == 1) && (vms->oldmessages != 11)) + res = ast_play_and_wait(chan, "vm-staroe"); + else + res = ast_play_and_wait(chan, "vm-staryh"); + } + + if (!res) { + + if ((lastnum == 1) && (vms->oldmessages != 11)) + res = ast_play_and_wait(chan, "vm-soobshenie"); + else + if (((vms->oldmessages < 10) || (vms->oldmessages > 21)) && (lastnum < 5)) + res = ast_play_and_wait(chan, "vm-soobsheniya"); + else + res = ast_play_and_wait(chan, "vm-soobsheniy"); + } + } + + if (!res) { + if (!vms->oldmessages && !vms->newmessages) { + res = ast_play_and_wait(chan, "vm-no"); + if (!res) + res = ast_play_and_wait(chan, "vm-soobsheniy"); + } + } + } + return res; +} + + static int vm_intro(struct ast_channel *chan,struct vm_state *vms) { /* Play voicemail intro - syntax is different for different languages */ @@ -4515,6 +4620,8 @@ return vm_intro_se(chan, vms); } else if (!strcasecmp(chan->language, "no")) { /* NORWEGIAN syntax */ return vm_intro_no(chan, vms); + } else if (!strcasecmp(chan->language, "ru")) { /* RUSSIAN syntax */ + return vm_intro_ru(chan, vms); } else { /* Default to ENGLISH */ return vm_intro_en(chan, vms); }