#include <stdio.h>
#include <signal.h>
#include "kdefs.h"
#include "ktable.h"
struct _cv_state {
char **my_outbuf;
size_t *my_outbytesleft;
int invalid;
int flush_obuf;
char temp_obuf[5];
int temp_obuf_cnt;
};
void AddChar (char Char, struct _cv_state *st);
void echo_conso(char code, struct _cv_state *st);
void echo_vowel(char code, struct _cv_state *st);
int
write_21(code_2, st)
KCHAR code_2;
struct _cv_state *st;
{
register KCHAR buffer;
register char code_1;
buffer = Y19_32[(short)INITIAL_SOUND(code_2) - 0x09] + BEG_OF_CONSO;
code_1 = (char) buffer;
if(code_1 != BEG_OF_CONSO)
AddChar(code_1, st);
buffer = Y21_32[(short)MIDDLE_SOUND(code_2)] + BEG_OF_VOW;
code_1 = (char) buffer;
if(code_1 != BEG_OF_VOW)
echo_vowel(code_1, st);
buffer = Y28_32[FINAL_SOUND(code_2) - 0x01] + BEG_OF_CONSO;
code_1 = (char) buffer;
if(code_1 != BEG_OF_CONSO)
echo_conso(code_1, st);
return(1);
}
void
echo_vowel(char code, struct _cv_state* st)
{
switch (code) {
case O_A:
AddChar(O, st);
AddChar(A, st);
break;
case O_AE:
AddChar(O, st);
AddChar(AE, st);
break;
case O_I:
AddChar(O, st);
AddChar(I, st);
break;
case U_E:
AddChar(U, st);
AddChar(E, st);
break;
case U_EA:
AddChar(U, st);
AddChar(EA, st);
break;
case U_I:
AddChar(U, st);
AddChar(I, st);
break;
case EU_I:
AddChar(EU, st);
AddChar(I, st);
break;
default:
AddChar(code, st);
break;
}
}
void
echo_conso(char code, struct _cv_state *st)
{
switch (code) {
case GIUG_SIOD:
AddChar(GI_UG, st);
AddChar(SI_OD, st);
break;
case NIUN_JIUD:
AddChar(NI_UN, st);
AddChar(JI_UD, st);
break;
case NIUN_HIUD:
AddChar(NI_UN, st);
AddChar(HI_UD, st);
break;
case RIUL_GIUG:
AddChar(RI_UL, st);
AddChar(GI_UG, st);
break;
case RIUL_MIUM:
AddChar(RI_UL, st);
AddChar(MI_UM, st);
break;
case RIUL_BIUB:
AddChar(RI_UL, st);
AddChar(BI_UB, st);
break;
case RIUL_SIOD:
AddChar(RI_UL, st);
AddChar(SI_OD, st);
break;
case RIUL_TIGUT:
AddChar(RI_UL, st);
AddChar(TI_GUT, st);
break;
case RIUL_PIUP:
AddChar(RI_UL, st);
AddChar(PI_UP, st);
break;
case RIUL_HIUD:
AddChar(RI_UL, st);
AddChar(HI_UD, st);
break;
case BIUB_SIOD:
AddChar(BI_UB, st);
AddChar(SI_OD, st);
break;
default :
AddChar(code, st);
break;
}
}
#ifdef TESTPRINT
main(argc,argv)
int argc;
char *argv[];
{
int fd,i,n;
char *myname;
short buf[BUFSIZ];
myname = argv[0];
if(argc == 1){
printf("usage: %s file ...\n",myname);
exit(0);
} else {
while(--argc > 0){
if((fd = open(*++argv,0)) == -1){
printf("%s: can't open %s\n",myname,*argv);
} else {
while ((n = read(fd,buf,bufsize)) > 0){
for (i = 0; i < n/2; i++)
write_21(buf[i]);
}
close(fd);
}
}
}
}
#endif