typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned long ulong; ushort order [] = { //chiRappu /*day*/0xbf3, /*month*/0xbf4, /*year*/0xbf5, /*cr*/0xbf6, /*db*/0xbf7, /*ditto*/0xbf8, /*Rs*/0xbf9, /*#*/0xbfa, //eN /*0*/0xbe6, /*1*/0xbe7, /*2*/0xbe8, /*3*/0xbe9, /*4*/0xbea, /*5*/0xbeb, /*6*/0xbec, /*7*/0xbed, /*8*/0xbee, /*9*/0xbef, /*10*/0xbf0, /*100*/0xbf1, /*1000*/0xbf2, //uyir /*a*/0xb85, /*aa*/0xb86, /*i*/0xb87, /*ee*/0xb88, /*u*/0xb89, /*oo*/0xb8a, /*e*/0xb8e, /*E*/0xb8f, /*ai*/0xb90, /*o*/0xb92, /*O*/0xb93, /*au*/0xb94, //aayutham /*ah*/0xb83, //akara uyir mey -1, /*ka*/0xb95, -1, /*nga*/0xb99, -1, /*cha*/0xb9a, -1, /*nYa*/0xb9e, -1, /*ta*/0xb9f, -1, /*Na*/0xba3, -1, /*tha*/0xba4, -1, /*nha*/0xba8, -1, /*pa*/0xbaa, -1, /*ma*/0xbae, -1, /*ya*/0xbaf, -1, /*ra*/0xbb0, -1, /*la*/0xbb2, -1, /*va*/0xbb5, -1, /*zha*/0xbb4, -1, /*La*/0xbb3, -1, /*Ra*/0xbb1, -1, /*na*/0xba9, //grantham -1, /*ja*/0xb9c, -1, /*ca*/0xbb6, -1, /*sha*/0xbb7, -1, /*sa*/0xbb8, -1, /*ha*/0xbb9, //vadamozhi grantham -1, 0xb96, -1, 0xb97, -1, 0xb98, -1, 0xb9b, -1, 0xb9d, -1, 0xba0, -1, 0xba1, -1, 0xba2, -1, 0xba5, -1, 0xba6, -1, 0xba7, -1, 0xbab, -1, 0xbac, -1, 0xbad, /*ksh*/-1, /*fa*/-1, /*sree*/-1, //kuRi /*pulli*/0xbcd, /*a*/-1, /*aa*/0xbbe, /*i*/0xbbf, /*ee*/0xbc0, /*u*/0xbc1, /*oo*/0xbc2, /*e*/0xbc6, /*E*/0xbc7, /*ai*/0xbc8, /*o*/0xbca, /*O*/0xbcb, /*ou*/0xbd7, /*ou*/0xbcc, //end 0 }; int tamcmp (ushort* s1, ushort* s2) { ushort *s [2] = {s1, s2}; int l[2], p[2], t[2], z[2]; int i, j, k; l[0] = wcslen (s[0]); l[1] = wcslen (s[1]); int ml = (l[0] > l[1])? l[0]: l[1]; for (i = 0; i < ml; i++) { ushort c[2][4] = {0}; for (j = 0; j < 2; j++) { for (k = 0; k < 4 && (i + k) < l[j]; k++) { c[j][k] = s[j][i + k]; } } t[0] = t[1] = 0; if ((c[0][0] >= 0xb80 && c[0][0] < 0xbff) && (c[1][0] >= 0xb80 && c[1][0] < 0xbff)) { p[0] = p[1] = -1; for (j = 0; order [j]; j++) { for (k = 0; k < 2; k++) { if (c[k][0] == order[j]) { p[k] = j; if (p[1 - k] != -1) { break; } } } } for (j = 0; j < 2; j++) { t[j] = 1; z[j] = 1; if (p[j] >= 33 && p[j] <= 107) { //consonents if (c[j][1] == 0xbcd) { if (c[j][0] == 0xb95 && c[j][2] == 0xbb7) { //ksha p[j] += 70; t[j] = 3; z[j] = 3; } else if (c[j][0] == 0xbb8 && c[j][2] == 0xbb0 && c[j][3] == 0xbc0) { //sri p[j] += 72; t[j] = 5; z[j] = 4; } else if (p[j] >= 35) { p[j] --; t[j] = 2; z[j] = 2; } } else { if (c[j][0] == 0xbb8 && c[j][1] == 0xbaa) { //fa p[j] += 71; t[j] = 4; z[j] = 2; } } } } if (t[0] == t[1]) { if (t[0] <= 2) { if (c[0][0] != c[0][1]) { return (c[0][0] - c[1][0]); } } i += (z[0] - 1); } else { if (p[0] != p[1]) { return (p[0] - p[1]); } } } else { if (c[0][0] != c[1][0]) { return (c[0][0] - c[1][0]); } } } return 0; }