1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include "indian.h"
static char *a2i_binsearch(struct a2i_tabl *a2i_table, char *word, int lindex, int hindex) {
int mindex, result;
while(lindex < hindex) {
mindex = (lindex + hindex) / 2;
result = strcmp(a2i_table[mindex].ascii, word);
if (result == 0) return a2i_table[mindex].iscii;
if (result > 0) hindex = mindex;
if (result < 0) lindex = mindex + 1;
}
return word;
}
/* IIT Kanpur WX-Keyboard */
static int matra(char *mstr) {
int i;
char mvowels[11] = { 'A', 'i', 'I', 'H', 'u', 'U', 'q', 'e', 'E', 'o', 'O'};
for (i=0;i<=11;i++)
if(mstr[0] == mvowels[i]) return 1;
return 0;
}
char *iitk2iscii(struct a2i_tabl *a2i_table, char *buf, char *remem, int a2i_sz) {
char bufferi[1000], buffer1[1000];
if (buf[0] == 'a') remem[0] = buf[0];
strcpy(bufferi, buf);
bzero(buffer1,1000);
if (remem[0] == 'a' && (matra(bufferi) == 1) && bufferi[0] != 'a') {
bufferi[1] = bufferi[0];
bufferi[0] = 'a';
bufferi[2] = '\0';
sprintf(buffer1 + strlen(buffer1), "\b%s",a2i_binsearch(a2i_table, bufferi, 0, a2i_sz));
} else {
bzero(remem,5);
strcpy(buffer1,a2i_binsearch(a2i_table, bufferi, 0, a2i_sz));
}
bzero(buf,8);
strncpy(buf, buffer1, strlen(buffer1));
return buf;
}
/* Inscript Keyboard */
static char * ins_process(struct a2i_tabl *a2i_table, char *str, int a2i_sz) {
char *buffer1;
buffer1 = (char *) malloc(1000);
sprintf(buffer1,"%s",(char *)a2i_binsearch(a2i_table, str,0,a2i_sz));
return buffer1;
}
char *ins2iscii(struct a2i_tabl *a2i_table, char *kbuf, int a2i_sz) {
char *buffer1, *bufferi;
bufferi = (char *) malloc(1000 * sizeof(char));
bzero(bufferi,1000);
strcat(bufferi,kbuf);
buffer1=ins_process(a2i_table, bufferi, a2i_sz);
strncpy(kbuf,buffer1, strlen(buffer1));
free(bufferi);
free(buffer1);
return kbuf;
}
|