/*
   Hangul Automata

   Written by Song Jaekyung
 */

#include "ptyx.h"
#include "data.h"

extern void HideCursor();

int hangul_state;
Char temp_hangul[8];
int (*converter) ();
static int f, m, l;

#define push(x)	( stack[ sp++ ] = (x) )
#define pop()	( stack[ --sp ] )

/* table_for_3 ¿¡¼­ »ç¿ëµÉ flag */

#define	F_F	0x100		/* ÃÊ¼º */
#define F_M	0x200		/* Áß¼º */
#define F_L	0x400		/* Á¾¼º */
#define F_A	0x800		/* ASCII */

/* 3 ¹ú½Ä¿¡¼­ ÀÚÆÇ º¯È¯ */

static unsigned short table_for_3[] =
{
  24 | F_L, '"' | F_A, '#' | F_A, '$' | F_A, '%' | F_A, '&' | F_A,	/* ! " # $ % & */
  18 | F_F, '(' | F_A, ')' | F_A, '*' | F_A, '+' | F_A, ',' | F_A,	/* ' ( ) * + , */
  '-' | F_A, '.' | F_A, 13 | F_M, 17 | F_F, 29 | F_L, 22 | F_L,		/* - . / 0 1 2 */
  19 | F_L, 19 | F_M, 26 | F_M, 5 | F_M, 12 | F_M, 28 | F_M,	/* 3 4 5 6 7 8 */
  20 | F_M, ':' | F_A, 9 | F_F, '2' | F_A, '=' | F_A, '3' | F_A,	/* 9 : ; < = > */
  '?' | F_A, '@' | F_A, 8 | F_L, '!' | F_A, 11 | F_L, 10 | F_L,		/* ? @ A B C D */
  26 | F_L, 3 | F_L, '/' | F_A, 39 | F_A, '8' | F_A, '4' | F_A,		/* E F G H I J */
  '5' | F_A, '6' | F_A, '1' | F_A, '0' | F_A, '9' | F_A, '>' | F_A,	/* K L M N O P */
  28 | F_L, 6 | F_M, 7 | F_L, ';' | F_A, '7' | F_A, 16 | F_L,	/* Q R S T U V */
  27 | F_L, 20 | F_L, '<' | F_A, 25 | F_L, '[' | F_A, 92 | F_A,		/* W X Y Z [ \ */
  ']' | F_A, '^' | F_A, '_' | F_A, '`' | F_A, 23 | F_L, 20 | F_M,	/* ] ^ _ ` a b */
  10 | F_M, 29 | F_M, 11 | F_M, 3 | F_M, 27 | F_M, 4 | F_F,	/* c d e f g h */
  8 | F_F, 13 | F_F, 2 | F_F, 14 | F_F, 20 | F_F, 11 | F_F,	/* i j k l m n */
  16 | F_F, 19 | F_F, 21 | F_L, 4 | F_M, 5 | F_L, 7 | F_M,	/* o p q r s t */
  5 | F_F, 13 | F_M, 9 | F_L, 2 | F_L, 7 | F_F, 17 | F_L,	/* u v w x y z */
};

/* 3 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> ÃÊ¼º º¯È¯
   °á°ú: ÃÊ¼ºÀÌ ¾Æ´Ï¸é 0
 */
static int
fcon3 (c)
     int c;
{
  if (c >= '!' && c <= 'z')
    if (table_for_3[c - '!'] & F_F)
      return table_for_3[c - '!'] & 0xff;
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> Áß¼º º¯È¯
   °á°ú: Áß¼ºÀÌ ¾Æ´Ï¸é 0
 */
static int
vow3 (c)
     int c;
{
  if (c >= '!' && c <= 'z')
    if (table_for_3[c - '!'] & F_M)
      return table_for_3[c - '!'] & 0xff;
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> ¹ÞÄ§ º¯È¯
   °á°ú: ¹ÞÄ§ÀÌ ¾Æ´Ï¸é 0
 */
static int
lcon3 (c)
     int c;
{
  if (c >= '!' && c <= 'z')
    if (table_for_3[c - '!'] & F_L)
      return table_for_3[c - '!'] & 0xff;
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ (ÇöÀçÃÊ¼º, ÀÔ·Â¿µ¹®) -> º¹ÇÕÃÊ¼º Ã³¸® */

static int
comfcon3 (v, c)
     int v, c;
{
#ifdef DELETED
  switch (v)
    {
    case 2:			/* ¤¡ */
      switch (c)
	{
	case 'k':		/* ¤¡ */
	  return 3;		/* ¤¢ */
	}
      break;
    case 5:			/* ¤§ */
      switch (c)
	{
	case 'u':
	  return 6;		/* ¤¨ */
	}
      break;
    case 9:			/* ¤² */
      switch (c)
	{
	case ';':
	  return 10;
	}
      break;
    case 11:			/* ¤µ */
      switch (c)
	{
	case 'n':
	  return 12;
	}
      break;
    case 14:			/* ¤¸ */
      switch (c)
	{
	case 'l':
	  return 15;
	}
    }
#else
  if (v == 2 && c == 'k') return 3;
  if (v == 5 && c == 'u') return 6;
  if (v == 9 && c == ';') return 10;
  if (v == 11 && c == 'n') return 12;
  if (v == 14 && c == 'l') return 15;
#endif
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ (ÇöÀç¸ðÀ½, ÀÔ·Â ¿µ¹®) -> º¹ÇÕ ¸ðÀ½ Ã³¸® */

static int
comvow3 (v, c)
     int v, c;
{
  switch (v)
    {
    case 13:			/* ¤Ç */
      switch (c)
	{
	case 'f':		/* ¤Ç¤¿ */
	  return 14;
	case 'r':		/* ¤Ç¤À */
	  return 15;
	case 'd':		/* ¤Ç¤Ó */
	  return 18;
	}
      break;
    case 20:			/* ¤Ì */
      switch (c)
	{
	case 't':		/* ¤Ì¤Ã */
	  return 21;
	case 'c':		/* ¤Ì¤Ä */
	  return 22;
	case 'd':		/* ¤Ì¤Ó */
	  return 23;
	}
      break;

      /* 3 ¹ú½Ä ÀÚÆÇÀº ¤Ñ¤Ó °¡ ÀÖÀ¸¹Ç·Î ... */
    }
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ (ÇöÀç ¹ÞÄ§, ¿µ¹®ÀÚ ÀÔ·Â) -> ¹ÞÄ§ */

static int
comcon3 (k, c)
     int k;
     int c;
{
  switch (k)
    {
    case 2:			/* ¤¡ */
      switch (c)
	{
	case 'x':
	  return 3;		/* ¤¡¤¡ */
	case 'q':
	  return 4;		/* ¤¡¤µ */
	}
      break;
    case 5:			/* ¤¤ */
      switch (c)
	{
	case '!':		/* ¤¤¤¸ */
	  return 6;
	case '1':
	  return 7;		/* ¤¤¤¾ */
	}
      break;
    case 9:			/* ¤© */
      switch (c)
	{
	case 'x':		/* ¤©¤¡ */
	  return 10;
	case 'z':		/* ¤©¤± */
	  return 11;
	case '3':		/* ¤©¤² */
	  return 12;
	case 'q':		/* ¤©¤µ */
	  return 13;
	case 'W':		/* ¤©¤¼ */
	  return 14;
	case 'Q':		/* ¤©¤½ */
	  return 15;
	case '1':		/* ¤©¤¾ */
	  return 16;
	}
      break;
    case 19:
      switch (c)
	{
	case 'q':		/* ¤²¤µ */
	  return 20;
	}
      break;
    }
  return 0;
}

/* 3 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ Ã³¸® */

static int
ascii3 (c, buf)
     int c;
     char *buf;
{
  if (c >= '!' && c <= 'z')
    if (table_for_3[c - '!'] & F_A)
      c = table_for_3[c - '!'] & 0xff;
  return ascii (c, buf);
}

/* 2 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> Á¶ÇÕÇü ÃÊ¼º º¯È¯
   °á°ú: ÃÊ¼ºÀÌ ¾Æ´Ï¸é 0
 */
static int
fcon (c)
     int c;
{
  static char table[] =
  {
    /*E */ 6, /*F */ 0, /*G */ 0, /*H */ 0, /*I */ 0, /*J */ 0, /*K */ 0,
    /*L */ 0, /*M */ 0, /*N */ 0, /*O */ 0, /*P */ 0, /*Q */ 10, /*R */ 3,
    /*S */ 0, /*T */ 12, /*U */ 0, /*V */ 0, /*W */ 15, /*X */ 0, /*Y */ 0,
    /*Z */ 0, /*[ */ 0, /*\ */ 0, /*] */ 0, /*^ */ 0, /*_*/ 0, /*` */ 0,
    /*a */ 8, /*b */ 0, /*c */ 16, /*d */ 13, /*e */ 5, /*f */ 7, /*g */ 20,
    /*h */ 0, /*i */ 0, /*j */ 0, /*k */ 0, /*l */ 0, /*m */ 0, /*n */ 0,
    /*o */ 0, /*p */ 0, /*q */ 9, /*r */ 2, /*s */ 4, /*t */ 11, /*u */ 0,
    /*v */ 19, /*w */ 14, /*x */ 18, /*y */ 0, /*z */ 17};

  if (c < 'E' || c > 'z')
    return 0;
  return table[c - 'E'];
}

/* 2 ¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> Áß¼º º¯È¯
   °á°ú: Áß¼ºÀÌ ¾Æ´Ï¸é 0
 */
static int
vow (c)
     int c;
{
  static char table[] =
  {
    /*O */ 6, /*P */ 12, /*Q */ 0, /*R */ 0, /*S */ 0, /*T */ 0, /*U */ 0,
    /*V */ 0, /*W */ 0, /*X */ 0, /*Y */ 0, /*Z */ 0, /*[ */ 0, /*\ */ 0,
    /*] */ 0, /*^ */ 0, /*_*/ 0, /*` */ 0, /*a */ 0, /*b */ 26, /*c */ 0,
    /*d */ 0, /*e */ 0, /*f */ 0, /*g */ 0, /*h */ 13, /*i */ 5, /*j */ 7,
    /*k */ 3, /*l */ 29, /*m */ 27, /*n */ 20, /*o */ 4, /*p */ 10, /*q */ 0,
    /*r */ 0, /*s */ 0, /*t */ 0, /*u */ 11, /*v */ 0, /*w */ 0, /*x */ 0,
  /*y */ 19};

  if (c < 'O' || c > 'y')
    return 0;
  return table[c - 'O'];
}

/* 2¹ú½Ä¿¡¼­ ¿µ¹®ÀÚ -> ¹ÞÄ§ º¯È¯
   °á°ú: ¹ÞÄ§ÀÌ ¾Æ´Ï¸é 0
 */
static int
lcon (c)
     int c;
{
  static char table[] =
  {
    /*R */ 3, /*S */ 0, /*T */ 22, /*U */ 0, /*V */ 0, /*W */ 0, /*X */ 0,
    /*Y */ 0, /*Z */ 0, /*[ */ 0, /*\ */ 0, /*] */ 0, /*^ */ 0, /*_*/ 0,
    /*` */ 0, /*a */ 17, /*b */ 0, /*c */ 25, /*d */ 23, /*e */ 8, /*f */ 9,
    /*g */ 29, /*h */ 0, /*i */ 0, /*j */ 0, /*k */ 0, /*l */ 0, /*m */ 0,
    /*n */ 0, /*o */ 0, /*p */ 0, /*q */ 19, /*r */ 2, /*s */ 5, /*t */ 21,
    /*u */ 0, /*v */ 28, /*w */ 24, /*x */ 27, /*y */ 0, /*z */ 26};

  if (c < 'R' || c > 'z')
    return 0;
  return table[c - 'R'];
}

/* 2 ¹ú½Ä¿¡¼­ (ÇöÀç ¹ÞÄ§, ¿µ¹®ÀÚ ÀÔ·Â) -> ¹ÞÄ§ º¯È¯ */

static int
comcon (k, c)
     int k;
     int c;
{
  switch (k)
    {
    case 2:			/* ¤¡ */
      switch (c)
	{
	case 't':
	  return 4;		/* ¤¡¤µ */
	}
      break;
    case 5:			/* ¤¤ */
      switch (c)
	{
	case 'w':		/* ¤¤¤¸ */
	  return 6;
	case 'g':		/* ¤¤¤¾ */
	  return 7;
	}
      break;
    case 9:			/* ¤© */
      switch (c)
	{
	case 'r':		/* ¤©¤¡ */
	  return 10;
	case 'a':		/* ¤©¤± */
	  return 11;
	case 'q':		/* ¤©¤² */
	  return 12;
	case 't':		/* ¤©¤µ */
	  return 13;
	case 'x':		/* ¤©¤¼ */
	  return 14;
	case 'v':		/* ¤©¤½ */
	  return 15;
	case 'g':		/* ¤©¤¾ */
	  return 16;
	}
      break;
    case 19:			/* ¤² */
      switch (c)
	{
	case 't':		/* ¤²¤µ */
	  return 20;
	}
      break;
    }
  return 0;
}

/* 2¹ú½Ä¿¡¼­ (ÇöÀç Áß¼º, ¿µ¹® ÀÔ·Â) -> Áß¼º º¯È¯ */

static int
comvow (v, c)
     int v;
     int c;
{
  switch (v)
    {
    case 13:			/* ¤Ç */
      switch (c)
	{
	case 'k':		/* ¤Ç¤¿ */
	  return 14;
	case 'o':		/* ¤Ç¤À */
	  return 15;
	case 'l':		/* ¤Ç¤Ó */
	  return 18;
	}
      break;
    case 20:			/* ¤Ì */
      switch (c)
	{
	case 'j':		/* ¤Ì¤Ã */
	  return 21;
	case 'p':		/* ¤Ì¤Ä */
	  return 22;
	case 'l':		/* ¤Ì¤Ó */
	  return 23;
	}
      break;
    case 27:			/* ¤Ñ */
      switch (c)
	{
	case 'l':		/* ¤Ñ¤Ó */
	  return 28;
	}
      break;
    }
  return 0;
}

/* 2 ¹ú½Ä¿¡¼­ ¿µ¹® Ã³¸® */

ascii (c, buf)
     int c;
     char *buf;
{
  if (c == -1)
    {
      if (hangul_state)
	hangul_state = 0;
      else
	{
	  hangul_state = 1;
	  f = 1;
	  m = 2;
	  l = 1;
	}
      show_status (&term->screen, 0);
      return 0;
    }
  else if (c == -2)
    {				/* flush output */
      f = 1;
      m = 2;
      l = 1;
      return 0;
    }
  else if (hangul_state && c == 27)
    {
      hangul_state = 0;
      show_status (&term->screen, 0);
      buf[0] = c;
      return 1;
    }
#ifdef USE_WON
  else if (hangul_state && c == '\\')
    {
      buf[0] = 0xa3;
      buf[1] = 0xdc;
      return 2;
    }
#endif
  else
    {
      buf[0] = c;
      return 1;
    }
}

/* (¿µ¹® ÀÔ·Â) -> ¿Ï¼ºÇü ÄÚµå ¹®ÀÚ¿­
   c : ¿µ¹® ASCII
   -1 : ÇÑ¿µ toggle
   -2 : ÇöÀç ±¸¼ºÁßÀÎ ÇÑ±ÛÀ» µ¹·Á ÁØ´Ù. flush.
   buf : ¿Ï¼ºµÈ ±ÛÀÚÀÇ KS C 5601 - 1992 ÄÚµå
   °á°ú: buf ¿¡ ¸î ¹ÙÀÌÆ®³ª µé¾î °¬´Â°¡
   ¿ÜºÎ ÂüÁ¶: display_temp() : ÇöÀç ±¸¼ºÁßÀÎ ÇÑ±ÛÀ» È­¸é¿¡ ±×·Á ÁØ´Ù.
   term->screen.keyboard : ÀÚÆÇ °áÁ¤. 2 = 2¹ú½Ä, 3 = 3¹ú½Ä
   convert_3_to_ks() : Á¶ÇÕ->¿Ï¼º º¯È¯. º¯È¯µÈ ÈÄ ¹®ÀÚ¿­ ±æÀÌ¸¦
   µ¹·Á Áà¾ß ÇÑ´Ù. 2 ¶Ç´Â 8
   show_status() : ÇÑ±Û »óÅÂ ÀÎÁö ¿µ¹® »óÅÂÀÎÁö Ç¥½ÃÇÑ´Ù.
 */
int
hangul_automata (c, buf)
     int c;			/* input character */
     char *buf;
{
  static int sp, pc, stack[10];
  int t, t2, rs;

/* begin */
  unsigned char dummy[16];
  extern int font_ks_mode;
/* end patch by ysyun, at 04/26/94 */



  if (hangul_state == 0)	/* ¿µ¹® »óÅÂ */
    return ascii (c, buf);

  if (term->screen.keyboard == 2)
    {				/* 2 ¹ú½Ä */
      switch (hangul_state)
	{
	case 1:		/* ÃÊ¼ºÀ» ±â´Ù¸² */
	  sp = 0;
	  if (t = fcon (c))
	    {
	      display_temp (t, 2, 1);
	      f = t;
	      hangul_state = 2;
	      return 0;
	    }
	  else if (t = vow (c))
	    {
	      display_temp (1, t, 1);
	      f = 1;
	      m = t;
	      push (2);
	      hangul_state = 3;
	      return 0;
	    }
	  else
	    {
	      return ascii (c, buf);
	    }
	  break;
	case 2:		/* Áß¼º ±â´Ù¸² */
	  if (t = vow (c))
	    {
	      display_temp (f, t, 1);
	      push (2);
	      m = t;
	      hangul_state = 3;
	      return 0;
	    }
	  else if (t = fcon (c))
	    {
	      rs = (*converter) (f, 2, 1, buf);
	      display_temp (t, 2, 1);
	      sp = 0;
	      f = t;
	      hangul_state = 2;
	      return rs;
	    }
	  else if (c == '\b')
	    {
	      display_temp (-1, -1, -1);
	      hangul_state = 1;
	      return 0;
	    }
	  else
	    {
	      rs = (*converter) (f, 2, 1, buf);
	      display_temp (-1, -1, -1);
	      hangul_state = 1;
	      return ascii (c, buf + rs) + rs;
	    }
	  break;
	case 3:		/* Á¾¼º ±â´Ù¸² */
/*            if( t = lcon(c) ) {     /* comment by ysyun : 04/26/94 */
/* ÆùÆ®°¡ ¿Ï¼ºÇüÀÎ °æ¿ì, ¿Ï¼ºÇü °Ë»çÇÑ´Ù. */
	  if ((t = lcon (c)) &&
	      (font_ks_mode != 't' ||
	       (font_ks_mode == 't' &&
		convert_3_to_ks (f, m, t, dummy) == 2)))
	    {
/* end patch : ysyun */

	      display_temp (f, m, t);
	      push (1);
	      l = t;
	      pc = c;
	      hangul_state = 4;
	      return 0;
	    }
	  else if (t = comvow (m, c))
	    {
	      display_temp (f, t, 1);
	      push (m);
	      m = t;
	      return 0;
	    }
	  else if (t = fcon (c))
	    {
	      rs = (*converter) (f, m, 1, buf);
	      display_temp (t, 2, 1);
	      f = t;
	      sp = 0;
	      hangul_state = 2;
	      return rs;
	    }
	  else if (t = vow (c))
	    {
	      rs = (*converter) (f, m, 1, buf);
	      f = 1;
	      m = t;
	      l = 1;
	      display_temp (f, m, l);
	      sp = 0;
	      push (2);
	      return rs;
	    }
	  else if (c == '\b')
	    {			/* back space */
	      m = pop ();
	      if (m == 2)
		{		/* we extracted all */
		  if (f == 1)
		    {
		      hangul_state = 1;
		      f = -1;
		    }
		  else
		    {
		      hangul_state = 2;
		    }
		}
	      display_temp (f, m, 1);
	      return 0;
	    }
	  else
	    {
	      rs = (*converter) (f, m, 1, buf);
	      display_temp (-1, -1, -1);
	      sp = 0;
	      hangul_state = 1;
	      return ascii (c, buf + rs) + rs;
	    }
	  break;
	case 4:		/* º¹ÇÕ ¹ÞÄ§ ±â´Ù¸² */
	  if (t = comcon (l, c))
	    {
	      display_temp (f, m, t);
	      push (l);
	      l = t;
	      pc = c;
	      return 0;
	    }
	  else if (t = vow (c))
	    {
	      rs = (*converter) (f, m, pop (), buf);
	      display_temp (f = fcon (pc), m = t, 1);
	      sp = 0;
	      push (2);
	      hangul_state = 3;
	      return rs;
	    }
	  else if (t = fcon (c))
	    {
	      rs = (*converter) (f, m, l, buf);
	      display_temp (t, 2, 1);
	      f = t;
	      sp = 0;
	      hangul_state = 2;
	      return rs;
	    }
	  else if (c == '\b')
	    {			/* back space */
	      display_temp (f, m, l = pop ());
	      if (l == 1)
		hangul_state = 3;
	      return 0;
	    }
	  else
	    {
	      rs = (*converter) (f, m, l, buf);
	      display_temp (-1, -1, -1);
	      sp = 0;
	      hangul_state = 1;
	      return ascii (c, buf + rs) + rs;
	    }
	  break;
	}
    }
  else if (term->screen.keyboard == 3)
    {				/* 3 ¹ú½Ä */
      if (t = fcon3 (c))
	{
	  t2 = 0;
	  if (f > 1 && !(t2 = comfcon3 (f, c)) || m > 2 || l > 1)
	    {			/* Áß¼ºÀÌ ÀÖ°Å³ª ¹ÞÄ§ÀÌ ÀÖÀ½ */
	      rs = (*converter) (f, m, l, buf);
	      sp = 0;
	      m = 2;
	      l = 1;
	    }
	  else
	    {
	      if (t2)
		{
		  t = t2;
		}
	      rs = 0;
	    }
	  f = t;
	  display_temp (f, m, l);
	  push ((f << 10) | (m << 5) | l);
	  return rs;
	}
      else if (t = vow3 (c))
	{
	  t2 = 0;
	  if (m > 2 && !(t2 = comvow3 (m, c)) || l > 1)
	    {			/* ¹ÞÄ§ÀÌ ÀÖÀ½ */
	      rs = (*converter) (f, m, l, buf);
	      sp = 0;
	      f = 1;
	      l = 1;
	    }
	  else
	    {
	      if (t2)
		{
		  t = t2;
		}
	      rs = 0;
	    }
	  m = t;
	  display_temp (f, m, l);
	  push ((f << 10) | (m << 5) | l);
	  return rs;
	}
      else if (t = lcon3 (c))
	{
	  t2 = 0;
	  if (f > 1 && m < 3 || l > 1 && !(t2 = comcon3 (l, c)))
	    {			/* ÃÊ¼ºÀº ÀÖ°í Áß¼ºÀÌ ¾øÀ½ */
	      rs = (*converter) (f, m, l, buf);
	      sp = 0;
	      f = 1;
	      m = 2;
	    }
	  else
	    {
	      if (t2)
		{
		  t = t2;
		}
	      rs = 0;
	    }
	  l = t;
	  display_temp (f, m, l);
	  push ((f << 10) | (m << 5) | l);
	  return rs;
	}
      else if (c == '\b')
	{
	  if (sp > 0)
	    {
	      pop ();		/* ¸ÇÀ§ÀÇ ±ÛÀÚ´Â ¹ö¸°´Ù */
	      if (sp > 0)
		{
		  t = stack[sp - 1];
		  f = t >> 10;
		  m = (t >> 5) & 0x1f;
		  l = t & 0x1f;
		  display_temp (f, m, l);
		  return 0;
		}
	      f = 1;
	      m = 2;
	      l = 1;
	      display_temp (-1, -1, -1);
	      return 0;
	    }
	  else
	    {
	      return ascii3 (c, buf);
	    }
	}
      else
	{
	  if (f > 1 || m > 2 || l > 1)
	    {
	      rs = (*converter) (f, m, l, buf);
	      sp = 0;
	      f = 1;
	      m = 2;
	      l = 1;
	      display_temp (-1, -1, -1);
	    }
	  else
	    {
	      rs = 0;
	    }
	  return rs + ascii3 (c, buf + rs);
	}
    }
}

display_temp (f, m, l)
     int f, m, l;
{
  if (f < 0)
    {
      HideCursor ();
      temp_hangul[0] = 0;
    }
  else
    convert_3_to_johab (f, m, l, temp_hangul);
  ShowCursor ();
}

in_ks (f, m, t)
     int f, m, t;
{
  char buf[8];

  return convert_3_to_ks (f, m, t, buf) == 2;
}
