demo: KNF and ISO C migration

Signed-off-by: Masanori Ogino <mogino@acm.org>
This commit is contained in:
Masanori Ogino 2023-11-29 03:35:37 +09:00
commit d0ddfb8112

View file

@ -27,19 +27,10 @@
* *
*/ */
/*
* $SonyRCSfile: sample.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1997/01/23 11:26:29 $
*/
#include <stdio.h>
#include <locale.h> #include <locale.h>
#include <pwd.h> #include <pwd.h>
#include <stdio.h>
#include "sj3lib.h" #include "sj3lib.h"
#include "wchar16.h" #include "wchar16.h"
@ -51,66 +42,59 @@
char *pname; char *pname;
char *hname; char *hname;
int current_locale = LC_CTYPE_EUC; int current_locale = LC_CTYPE_EUC;
void
usage() usage()
{ {
fprintf(stderr, "Usage: %s [-v] [-H hostname]\n", pname); fprintf(stderr, "Usage: %s [-v] [-H hostname]\n", pname);
exit(1); exit(1);
} }
main (argc, argv) int
int argc; main(int argc, char **argv)
char **argv;
{ {
register int c; struct bunsetu bun[HBUFSIZ];
int ret; unsigned char alphabet[QBUFSIZ];
int vflag; unsigned char yomi[HBUFSIZ];
struct bunsetu bun[HBUFSIZ]; unsigned char kanji[BUFSIZ];
unsigned char alphabet[QBUFSIZ]; extern char *optarg;
unsigned char yomi[HBUFSIZ]; char *rindex(), *getlogin();
unsigned char kanji[BUFSIZ]; char *loc, *uname;
char *uname, *loc; struct passwd *getpwuid();
extern char *optarg; struct passwd *pwd;
char *rindex(), *getlogin(); int count = 1;
struct passwd *getpwuid(), *pwd; int c, ret, vflag;
int count=1;
loc = setlocale(LC_CTYPE, ""); loc = setlocale(LC_CTYPE, "");
if (strcmp(loc, "ja_JP.SJIS") == 0) { if (strcmp(loc, "ja_JP.SJIS") == 0) {
current_locale = LC_CTYPE_SHIFTJIS; current_locale = LC_CTYPE_SHIFTJIS;
} else if (strncmp(loc, "ja", 2) != 0 && } else if (strncmp(loc, "ja", 2) != 0 && strncmp(loc, "Ja", 2) != 0) {
strncmp(loc, "Ja", 2) != 0) {
fprintf(stderr, "Error: %s is not japanese locale\n", loc); fprintf(stderr, "Error: %s is not japanese locale\n", loc);
exit(1); exit(1);
} }
vflag = 0; vflag = 0;
hname = NULL; hname = NULL;
print_head(); print_head();
pname = argv[0]; pname = argv[0];
while ((c = getopt(argc, argv, "vk:H:")) != EOF) {
while ((c = getopt(argc, argv, "vk:H:")) != EOF) { switch (c) {
switch(c) {
case 'v': case 'v':
vflag++; vflag++;
break; break;
case 'H': case 'H':
hname = optarg; hname = optarg;
break; break;
case 'k': case 'k':
fprintf(stderr, "optarg = %s\n", optarg); fprintf(stderr, "optarg = %s\n", optarg);
count = atoi(optarg); count = atoi(optarg);
break; break;
case '?': case '?':
default : default:
usage(); usage();
break; break;
} }
@ -127,18 +111,16 @@ char **argv;
exit(1); exit(1);
} }
} }
#ifndef ORG
while (count--) {
#endif
if (ret = sj3_rkinit(RKFILE)) { if (ret = sj3_rkinit(RKFILE)) {
if (ret == 1) if (ret == 1) {
fprintf(stderr, "Can't open Romaji Kana Rule file %s\n", fprintf(stderr,
RKFILE); "Can't open Romaji Kana Rule file %s\n",
else RKFILE);
} else {
fprintf(stderr, "Error sj3_rkinit\n"); fprintf(stderr, "Error sj3_rkinit\n");
exit (1); }
exit(1);
} }
ret = sj3_open(hname, uname); ret = sj3_open(hname, uname);
if (hname == NULL) if (hname == NULL)
@ -147,83 +129,60 @@ while (count--) {
if (ret & SJ3_SERVER_DEAD) { if (ret & SJ3_SERVER_DEAD) {
fprintf(stderr, "%s:sj3serv dead\n", hname); fprintf(stderr, "%s:sj3serv dead\n", hname);
exit(1); exit(1);
} } else if (ret & SJ3_ALREADY_CONNECTED) {
else if (ret & SJ3_ALREADY_CONNECTED) { fprintf(stderr,
fprintf(stderr, "Already connected %s:sj3serv\n",hname); "Already connected %s:sj3serv\n", hname);
exit(1); exit(1);
} } else if (ret & SJ3_CONNECT_ERROR) {
else if (ret & SJ3_CONNECT_ERROR) { fprintf(stderr, "Can't connect %s:sj3serv\n",
fprintf(stderr, "Can't connect %s:sj3serv\n", hname); hname);
exit(1); exit(1);
} } else if (ret & SJ3_CANNOT_OPEN_MDICT) {
else if (ret & SJ3_CANNOT_OPEN_MDICT) { fprintf(stderr,
fprintf(stderr, "Can't open sj3 main dictionary\n"); "Can't open sj3 main dictionary\n");
(void)sj3_close(); (void)sj3_close();
exit(1); exit(1);
} }
fprintf(stderr, "Warning sj3_open error (return 0x%x)\n", ret); fprintf(stderr,
"Warning sj3_open error (return 0x%x)\n", ret);
} }
#ifdef ORG
while (1) { while (1) {
fprintf(stdout, "[Input Alphabet] "); fprintf(stdout, "[Input Alphabet] ");
if (fgets((char *)alphabet, QBUFSIZ, stdin) == NULL) if (fgets((char *)alphabet, QBUFSIZ, stdin) == NULL)
break; break;
if (RETURN(alphabet[0])) if (RETURN(alphabet[0]))
break; break;
#else
sprintf(alphabet, "%s", "tonarinokyakuhayokukakikuukyakuda");
#endif
rkconvs(yomi, alphabet); rkconvs(yomi, alphabet);
ret = sj3_getkan_mb(yomi, bun, kanji, BUFSIZ); ret = sj3_getkan_mb(yomi, bun, kanji, BUFSIZ);
if (ret == -1) { if (ret == -1) {
fprintf(stderr, "sj3_getkan: disconnected %s:sj3serv\n", fprintf(stderr, "sj3_getkan: disconnected %s:sj3serv\n",
hname); hname);
exit(1); exit(1);
} }
if (vflag) if (vflag)
pr_kanji(bun, ret); pr_kanji(bun, ret);
if (bun[ret - 1].destlen == 0) if (bun[ret - 1].destlen == 0)
strcat(kanji, bun[ret - 1].srcstr); strcat(kanji, bun[ret - 1].srcstr);
fprintf(stdout, "[Output Yomi ]:[%s]\n", yomi); fprintf(stdout, "[Output Yomi ]:[%s]\n", yomi);
fprintf(stdout, "[Output Kanji]:[%s]\n", kanji); fprintf(stdout, "[Output Kanji]:[%s]\n", kanji);
#ifdef ORG
} }
#endif
(void)sj3_close(); (void)sj3_close();
#ifndef ORG
}
#endif
} }
rkconvs(yomi, roma) void
unsigned char *yomi; rkconvs(unsigned char *yomi, unsigned char *roma)
unsigned char *roma;
{ {
register unsigned char *p, *q, *yp; int i, len, rlen;
register int i; unsigned char rbuf[16];
int rlen; unsigned char *p, *q, *yp;
int len; unsigned char ybuf[32];
unsigned char rbuf[16]; unsigned char tmp[HBUFSIZ];
unsigned char ybuf[32];
unsigned char tmp[HBUFSIZ];
yp = tmp; yp = tmp;
p = rbuf; p = rbuf;
@ -232,57 +191,49 @@ unsigned char *roma;
*p++ = *roma++; *p++ = *roma++;
*p = '\0'; *p = '\0';
rlen++; rlen++;
while(1) { while (1) {
if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) { if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) {
q = ybuf; q = ybuf;
while (*q != '\0') { while (*q != '\0')
*yp++ = *q++; *yp++ = *q++;
}
i = rlen; i = rlen;
rlen = strlen(rbuf); rlen = strlen(rbuf);
p = rbuf; p = rbuf;
p += rlen; p += rlen;
if (len >= i) if (len >= i)
break; break;
} } else if (len < 0) {
else if (len < 0) {
*yp++ = rbuf[0]; *yp++ = rbuf[0];
p = rbuf; p = rbuf;
q = (p + 1); q = (p + 1);
while(*q != '\0') while (*q != '\0')
*p++ = *q++; *p++ = *q++;
*p = '\0'; *p = '\0';
rlen--; rlen--;
} } else {
else
break; break;
}
} }
} }
if (rlen > 0) { if (rlen > 0) {
*p++ = '\n'; *p++ = '\n';
*p = '\0'; *p = '\0';
rlen++; rlen++;
while(rbuf[0] != '\0') { while (rbuf[0] != '\0') {
if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) { if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) {
q = ybuf; q = ybuf;
while (*q != '\0') { while (*q != '\0')
*yp++ = *q++; *yp++ = *q++;
}
rlen = strlen(rbuf); rlen = strlen(rbuf);
p = rbuf; p = rbuf;
p += rlen; p += rlen;
} } else {
else {
*yp++ = rbuf[0]; *yp++ = rbuf[0];
p = rbuf; p = rbuf;
q = (p + 1); q = (p + 1);
while(*q != '\0') while (*q != '\0')
*p++ = *q++; *p++ = *q++;
*p = '\0'; *p = '\0';
} }
@ -291,13 +242,12 @@ unsigned char *roma;
} }
*yp = '\0'; *yp = '\0';
sj3_hantozen_mb(yomi, tmp); sj3_hantozen_mb(yomi, tmp);
} }
print_head() { void
print_head()
{
fprintf(stdout, "\t*--------------------------------------------*\n"); fprintf(stdout, "\t*--------------------------------------------*\n");
fprintf(stdout, "\t* Sample Program for *\n"); fprintf(stdout, "\t* Sample Program for *\n");
fprintf(stdout, "\t* New Japanese Convert Library *\n"); fprintf(stdout, "\t* New Japanese Convert Library *\n");
@ -310,31 +260,24 @@ print_head() {
fprintf(stdout, "\t*--------------------------------------------*\n"); fprintf(stdout, "\t*--------------------------------------------*\n");
} }
str_make(out_str, in_str, len) void
unsigned char *out_str; str_make(unsiged char *out_str, unsigned char *in_str, int len)
unsigned char *in_str;
int len;
{ {
strncpy(out_str, in_str, len); strncpy(out_str, in_str, len);
out_str += len; out_str += len;
*out_str = '\0'; *out_str = '\0';
} }
pr_douon(yomi) void
unsigned char *yomi; pr_douon(unsigned char *yomi)
{ {
register int i; struct douon douon[BUFSIZ];
struct douon douon[BUFSIZ]; int douon_cnt, i;
int douon_cnt;
douon_cnt = sj3_getdouon_mb(yomi, douon); douon_cnt = sj3_getdouon_mb(yomi, douon);
if (douon_cnt < 0) { if (douon_cnt < 0) {
fprintf(stderr, "sj3_getdouon: disconnected %s:sj3serv\n", fprintf(stderr, "sj3_getdouon: disconnected %s:sj3serv\n",
hname); hname);
exit(1); exit(1);
} }
fprintf(stdout, "\t\tsj3_getdouon(yomi, douon)"); fprintf(stdout, "\t\tsj3_getdouon(yomi, douon)");
@ -342,22 +285,19 @@ unsigned char *yomi;
for (i = 0; i < douon_cnt; i++) { for (i = 0; i < douon_cnt; i++) {
fprintf(stdout, "\t\t--- * Douon : %d * ---\n", i); fprintf(stdout, "\t\t--- * Douon : %d * ---\n", i);
fprintf(stdout, "\t\t\tdlen : %d\n", douon[i].dlen); fprintf(stdout, "\t\t\tdlen : %d\n", douon[i].dlen);
fprintf(stdout, "\t\t\tddata:[%s]\n",douon[i].ddata); fprintf(stdout, "\t\t\tddata:[%s]\n", douon[i].ddata);
} }
} }
pr_bunsetu(now_bun, bunsetu_cnt) void
struct bunsetu *now_bun; pr_bunsetu(struct bunsetu *now_bun, int bunsetu_cnt)
int bunsetu_cnt;
{ {
unsigned char tmp_str[BUFSIZ]; unsigned char tmp_str[BUFSIZ];
unsigned char *yomi; unsigned char *yomi;
fprintf(stdout, "\t--- < Bunsetu : %d > ---\n", bunsetu_cnt); fprintf(stdout, "\t--- < Bunsetu : %d > ---\n", bunsetu_cnt);
fprintf(stdout, "\t\tsrclen : %d\n", now_bun -> srclen); fprintf(stdout, "\t\tsrclen : %d\n", now_bun->srclen);
str_make(tmp_str, now_bun -> srcstr, now_bun -> srclen); str_make(tmp_str, now_bun->srcstr, now_bun->srclen);
fprintf(stdout, "\t\tsrcstr:[%s]\n", tmp_str); fprintf(stdout, "\t\tsrcstr:[%s]\n", tmp_str);
yomi = tmp_str; yomi = tmp_str;
@ -366,18 +306,15 @@ int bunsetu_cnt;
else else
fprintf(stderr, "\t\tNot Conversion Bunsetsu\n"); fprintf(stderr, "\t\tNot Conversion Bunsetsu\n");
fprintf(stdout, "\t\tdestlen : %d\n", now_bun -> destlen); fprintf(stdout, "\t\tdestlen : %d\n", now_bun->destlen);
str_make(tmp_str, now_bun -> deststr, now_bun -> destlen); str_make(tmp_str, now_bun->deststr, now_bun->destlen);
fprintf(stdout, "\t\tdeststr:[%s]\n", tmp_str); fprintf(stdout, "\t\tdeststr:[%s]\n", tmp_str);
} }
pr_kanji(bun, bnum) void
struct bunsetu *bun; pr_kanji(struct bunsetu *bun, int bnum)
int bnum;
{ {
register int i; int i;
fprintf(stdout, "\tsj3_getkan(yomi, kanji)"); fprintf(stdout, "\tsj3_getkan(yomi, kanji)");
fprintf(stdout, "...Bunsetu count : %d\n", bnum); fprintf(stdout, "...Bunsetu count : %d\n", bnum);