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);
}