Path: blob/main/japanese/FreeWnn-server/files/patch-Wnn-etc-msg.c
16461 views
Index: Wnn/etc/msg.c1===================================================================2RCS file: /home/cvs/private/hrs/freewnn/Wnn/etc/msg.c,v3retrieving revision 1.1.1.14retrieving revision 1.25diff -u -p -r1.1.1.1 -r1.26--- Wnn/etc/msg.c 20 Dec 2008 07:13:30 -0000 1.1.1.17+++ Wnn/etc/msg.c 20 Dec 2008 15:22:40 -0000 1.28@@ -5,7 +5,7 @@9/*10* FreeWnn is a network-extensible Kana-to-Kanji conversion system.11* This file is part of FreeWnn.12- *13+ *14* Copyright Kyoto University Research Institute for Mathematical Sciences15* 1987, 1988, 1989, 1990, 1991, 199216* Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 199917@@ -69,124 +69,116 @@18#include "msg.h"1920static char *21-getlang (lang)22- char *lang;23+getlang(char *lang)24{25- static char tmp[32];26- char *p;27- int i;28+ static char tmp[32];29+ char *p;30+ int i;3132- if (lang == NULL || *lang == '\0')33- {34+ if (lang == NULL || *lang == '\0') {35#ifdef HAS_SETLOCALE36- lang = setlocale (LC_ALL, NULL);37- if (lang == NULL || *lang == '\0')38+ lang = setlocale(LC_ALL, NULL);39+ if (lang == NULL || *lang == '\0')40#endif41- {42- lang = getenv ("LC_MESSAGES");43- if (lang == NULL || *lang == '\0')44- {45- lang = getenv ("LANG");46- if (lang == NULL || *lang == '\0')47- {48- lang = DEF_LANG;49- }50- }51- }52- }53- for (i = 0, p = lang; *p && *p != '.'; i++, p++)54- {55- tmp[i] = *p;56- }57- tmp[i] = '\0';58- return (tmp);59- /*60- return(lang);61- */62+ {63+ lang = getenv("LC_MESSAGES");64+ if (lang == NULL || *lang == '\0') {65+ lang = getenv("LANG");66+67+ if (lang == NULL || *lang == '\0') {68+ lang = DEF_LANG;69+ }70+ }71+ }72+ }73+ for (i = 0, p = lang; *p && *p != '.'; i++, p++)74+ tmp[i] = *p;75+76+ tmp[i] = '\0';77+78+ return (tmp);79+ /*80+ return(lang);81+ */82}8384static int85-_search (id, bd)86- int *id;87- struct msg_bd *bd;88+_search(int *id,89+ struct msg_bd *bd)90{91- return (*id - bd->msg_id);92+ return (*id - bd->msg_id);93}9495static void96-_escape (op, ip)97- register char *op, *ip;98+_escape(register char *op,99+ register char *ip)100{101- for (; *ip != 0; ip++, op++)102- {103- if (*ip == '\\')104- {105- switch (*++ip)106- {107- case 'n':108- *op = '\n';109- break;110- case 't':111- *op = '\t';112- break;113- case 'b':114- *op = '\b';115- break;116- case 'r':117- *op = '\r';118- break;119- case 'f':120- *op = '\f';121- break;122- case 'v':123- *op = '\v';124- break;125- case '0':126- *op = 0;127- break;128- /*129- case 'a':130- *op = '\a';131- break;132- case 'e':133- case 'E':134- case 'o':135- case 'd':136- case 'x':137- break;138- */139- default:140- *op = *ip;141- break;142- }143- }144- else145- {146- if (*ip == '\n')147- {148- *op = '\0';149- }150- else151- {152- *op = *ip;153- }154- }155- }156- *op = 0;157+ for (; *ip != 0; ip++, op++) {158+ if (*ip == '\\') {159+ switch (*++ip) {160+ case 'n':161+ *op = '\n';162+ break;163+ case 't':164+ *op = '\t';165+ break;166+ case 'b':167+ *op = '\b';168+ break;169+ case 'r':170+ *op = '\r';171+ break;172+ case 'f':173+ *op = '\f';174+ break;175+ case 'v':176+ *op = '\v';177+ break;178+ case '0':179+ *op = 0;180+ break;181+ /*182+ case 'a':183+ *op = '\a';184+ break;185+ case 'e':186+ case 'E':187+ case 'o':188+ case 'd':189+ case 'x':190+ break;191+ */192+ default:193+ *op = *ip;194+ break;195+ }196+ } else {197+ if (*ip == '\n')198+ *op = '\0';199+ else200+ *op = *ip;201+ }202+ }203+ *op = 0;204}205206static char *207-get_msg_bd (cd, id)208- struct msg_cat *cd;209- int id;210+get_msg_bd(struct msg_cat *cd,211+ int id)212{213- register struct msg_bd *bd;214- if (cd->msg_bd == 0 || cd->msg_cnt == 0)215- return (NULL);216- bd = (struct msg_bd *) bsearch (&id, cd->msg_bd, cd->msg_cnt, sizeof (struct msg_bd), _search);217- if (bd == NULL)218- return (NULL);219- return (bd->msg);220+ register struct msg_bd *bd;221+222+ if (cd->msg_bd == 0 || cd->msg_cnt == 0)223+ return (NULL);224+225+ bd = (struct msg_bd *)bsearch(&id,226+ cd->msg_bd,227+ cd->msg_cnt,228+ sizeof (struct msg_bd),229+ _search);230+ if (bd == NULL)231+ return (NULL);232+ return (bd->msg);233}234235/* expand236@@ -195,229 +187,236 @@ get_msg_bd (cd, id)237%l: the language element from LANG238%t: the territory element from LANG239%c: the codeset element from LANG240- %%: a single % charctor241+ %%: a single % charctor242*/243static int244-expand (op, ip, name, lang)245- register char *op, *ip, *name, *lang;246+expand (register char *op,247+ register char *ip,248+ register char *name,249+ register char *lang)250{251- if (!ip || !*ip)252- return (-1);253- for (; *ip != 0; ip++)254- {255- if (*ip == '%')256- {257- switch (*++ip)258- {259- case 'N':260- if (!name || !*name)261- return (-1);262- strcpy (op, name);263- op += strlen (name);264- break;265- case 'L':266- if (!lang || !*lang)267- return (-1);268- strcpy (op, lang);269- op += strlen (lang);270- break;271- /*272- case 'l':273- strcpy(op, language);274- op += strlen(language);275- break;276- case 't':277- strcpy(op, terr);278- op += strlen(terr);279- break;280- case 'c':281- strcpy(op, code);282- op += strlen(code);283- break;284- case '%':285- strcpy(op, "%");286- op += strlen("%");287- break;288- */289- default:290- break;291- }292- }293- else294- {295- *op = *ip;296- op++;297- }298- }299- *op = '\0';300- return (0);301+ if (!ip || !*ip)302+ return (-1);303+304+ for (; *ip != 0; ip++) {305+ if (*ip == '%') {306+ switch (*++ip) {307+ case 'N':308+ if (!name || !*name)309+ return (-1);310+ strcpy(op, name);311+ op += strlen(name);312+ break;313+ case 'L':314+ if (!lang || !*lang)315+ return (-1);316+ strcpy(op, lang);317+ op += strlen(lang);318+ break;319+ /*320+ case 'l':321+ strcpy(op, language);322+ op += strlen(language);323+ break;324+ case 't':325+ strcpy(op, terr);326+ op += strlen(terr);327+ break;328+ case 'c':329+ strcpy(op, code);330+ op += strlen(code);331+ break;332+ case '%':333+ strcpy(op, "%");334+ op += strlen("%");335+ break;336+ */337+ default:338+ break;339+ }340+ } else {341+ *op = *ip;342+ op++;343+ }344+ }345+ *op = '\0';346+347+ return (0);348}349350351struct msg_cat *352-msg_open (name, nlspath, lang)353- char *name;354- char *nlspath;355- char *lang;356+msg_open (char *name,357+ char *nlspath,358+ char *lang)359{360- struct msg_cat *cd;361+ struct msg_cat *cd;362363- char fn[MAXPATHLEN];364- FILE *fp;365- char data[1024];366- char save[1024];367- int msg_cnt = 0;368- int msg_byte = 0;369- register char *dp;370- register struct msg_bd *bd;371- register char *msg, *l;372-373- l = getlang (lang);374- if (name && *name == '/')375- {376- strcpy (fn, name);377- }378- else379- {380- if (expand (fn, nlspath, name, l) == -1)381- {382- return (NULL);383+ char fn[MAXPATHLEN];384+ FILE *fp;385+ char data[1024];386+ char save[1024];387+ int msg_cnt = 0;388+ int msg_byte = 0;389+ register char *dp;390+ register struct msg_bd *bd;391+ register char *msg, *l;392+393+ l = getlang(lang);394+395+ if (name && *name == '/')396+ strcpy (fn, name);397+ else {398+ if (expand (fn, nlspath, name, l) == -1)399+ return (NULL);400}401- }402403- if (!(cd = (struct msg_cat *) malloc (sizeof (struct msg_cat))))404- return (NULL);405+ if (!(cd = (struct msg_cat *) malloc (sizeof (struct msg_cat))))406+ return (NULL);407+408+ strcpy (cd->name, name);409+ strcpy (cd->lang, l);410+ strcpy (cd->nlspath, nlspath);411+ cd->nextp = NULL;412+ cd->msg_cnt = 0;413+414+ if ((fp = fopen (fn, "r")) == NULL) {415+ /* message file not found */416+ cd->msg_bd = 0;417+ return (cd);418+ }419+420+ for (;;) {421+ /* first: count bytes */422+ if (fgets (data, 1024, fp) == NULL)423+ break;424+425+ /* comment */426+ if (*data == '#')427+ continue;428+429+ for (dp = data; *dp && *dp != '\t'; dp++);430+ /* msg_id:message\n */431+432+ if (*dp == '\0')433+ continue;434+435+ dp++;436+ msg_byte += strlen (dp);437+ msg_cnt++;438+ }439+440+ rewind(fp);441+442+ cd->msg_cnt = msg_cnt;443+444+ if (!(bd = cd->msg_bd =445+ (struct msg_bd *)malloc((sizeof (struct msg_bd)) * msg_cnt + msg_byte + 1))) {446+ fclose(fp);447+ free(cd);448+ return (NULL);449+ }450+451+ msg = (char *) bd + (sizeof (struct msg_bd)) * msg_cnt;452+453+ for (;;) {454+ /* second : get message */455+ if (fgets(data, 1024, fp) == NULL)456+ break;457+458+ if (*data == '#')459+ /* comment */460+ continue;461+462+ for (dp = data; *dp && *dp != '\t'; dp++);463+ /* msg_id:message\n */464+465+ if (*dp == '\0')466+ continue;467+468+ *dp = 0;469+ dp++;470+ bd->msg_id = atoi(data);471+ bd->msg = msg;472+ bd++;473+ _escape(save, dp);474+ strcpy(msg, save);475+ msg += strlen(save);476+ *msg = 0;477+ msg++;478+ }479480- strcpy (cd->name, name);481- strcpy (cd->lang, l);482- strcpy (cd->nlspath, nlspath);483- cd->nextp = NULL;484- cd->msg_cnt = 0;485-486- if ((fp = fopen (fn, "r")) == NULL)487- {488- /* message file not found */489- cd->msg_bd = 0;490- return (cd);491- }492- for (;;)493- {494- /* first: count bytes */495- if (fgets (data, 1024, fp) == NULL)496- break;497- if (*data == '#')498- continue; /* comment */499- for (dp = data; *dp && *dp != '\t'; dp++); /* msg_id:message\n */500- if (*dp == '\0')501- continue;502- dp++;503- msg_byte += strlen (dp);504- msg_cnt++;505- }506- rewind (fp);507-508- cd->msg_cnt = msg_cnt;509- if (!(bd = cd->msg_bd = (struct msg_bd *) malloc ((sizeof (struct msg_bd)) * msg_cnt + msg_byte + 1)))510- {511- fclose (fp);512- free (cd);513- return (NULL);514- }515- msg = (char *) bd + (sizeof (struct msg_bd)) * msg_cnt;516-517- for (;;)518- {519- /* second : get message */520- if (fgets (data, 1024, fp) == NULL)521- break;522- if (*data == '#')523- continue; /* comment */524- for (dp = data; *dp && *dp != '\t'; dp++); /* msg_id:message\n */525- if (*dp == '\0')526- continue;527- *dp = 0;528- dp++;529- bd->msg_id = atoi (data);530- bd->msg = msg;531- bd++;532- _escape (save, dp);533- strcpy (msg, save);534- msg += strlen (save);535- *msg = 0;536- msg++;537- }538- fclose (fp);539- return (cd);540+ fclose(fp);541+ return (cd);542}543544char *545-msg_get (catd, id, msg, lang)546- struct msg_cat *catd;547- int id;548- char *msg;549- register char *lang;550+msg_get(struct msg_cat *catd,551+ int id,552+ char *msg,553+ register char *lang)554{555- register struct msg_cat *cd;556- register char *msg_bd;557+ register struct msg_cat *cd;558+ register char *msg_bd;559560- if (catd == 0)561- goto error;562- cd = catd;563- if (lang == 0 || *lang == '\0')564- {565- lang = cd->lang;566- }567- else568- {569- for (;; cd = cd->nextp)570- {571- if (strcmp (lang, cd->lang) == 0)572- break;573- if (cd->nextp == 0)574- {575- cd->nextp = msg_open (cd->name, cd->nlspath, lang);576- cd = cd->nextp;577- break;578- }579- }580- }581+ if (catd == 0)582+ goto error;583+584+ cd = catd;585+586+ if (lang == 0 || *lang == '\0')587+ lang = cd->lang;588+ else {589+ for (;; cd = cd->nextp) {590+ if (strcmp(lang, cd->lang) == 0)591+ break;592+ if (cd->nextp == 0) {593+ cd->nextp = msg_open(cd->name, cd->nlspath, lang);594+ cd = cd->nextp;595+ break;596+ }597+ }598+ }599600- if (msg_bd = get_msg_bd (cd, id))601- return (msg_bd);602+ if (msg_bd = get_msg_bd(cd, id))603+ return (msg_bd);604error:605- if (msg != 0 && *msg != '\0')606- return (msg);607- {608- static char ret[128];609- sprintf (ret, "mes_id = %d: %s", id, DEF_MSG);610- return (ret);611- }612+613+ if (msg != 0 && *msg != '\0')614+ return (msg);615+616+ {617+ static char ret[128];618+ sprintf(ret, "mes_id = %d: %s", id, DEF_MSG);619+ return (ret);620+ }621}622623void624-msg_close (cd)625- register struct msg_cat *cd;626+msg_close(register struct msg_cat *cd)627{628- if (cd->nextp)629- msg_close (cd->nextp);630- if (cd->msg_bd)631- free (cd->msg_bd);632- if (cd)633- free (cd);634+ if (cd->nextp)635+ msg_close(cd->nextp);636+637+ if (cd->msg_bd)638+ free(cd->msg_bd);639+640+ if (cd)641+ free(cd);642}643644#ifdef not_use645/* test */646-main ()647+main()648{649- struct msg_cat *cd;650+ struct msg_cat *cd;651652- cd = msg_open ("msg", "%L", "ja_JP");653+ cd = msg_open("msg", "%L", "ja_JP");654655- printf (msg_get (cd, 5, "message not found\n", "ja_JP"), 555);656- printf (msg_get (cd, 6, "message not found\n", "zh_CN"));657- printf (msg_get (cd, -1, "", "ja_JP"), 555);658- printf (msg_get (cd, 2, "message not found\n", "ja_JP"), "abc");659- printf (msg_get (cd, 100, "message not found\n", "zh_CN"), "abc");660+ printf (msg_get(cd, 5, "message not found\n", "ja_JP"), 555);661+ printf (msg_get(cd, 6, "message not found\n", "zh_CN"));662+ printf (msg_get(cd, -1, "", "ja_JP"), 555);663+ printf (msg_get(cd, 2, "message not found\n", "ja_JP"), "abc");664+ printf (msg_get(cd, 100, "message not found\n", "zh_CN"), "abc");665}666#endif /* not_use */667668669