home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / comm / ykh121.zip / YKHSRC.ZIP / INPUT.C < prev    next >
C/C++ Source or Header  |  1993-03-27  |  3KB  |  137 lines

  1. #include "romkan.h"
  2. #include "graph.h"
  3. #include "input.h"
  4.  
  5. unsigned kana_ptr;
  6. unsigned char kana_buf[81];
  7. unsigned char kana_string[81];
  8. unsigned inputmode;
  9.  
  10. #define EUC       8
  11. #define SHIFT_JIS 9
  12.  
  13. extern int sixteen_encoding;
  14. extern int fix_jis;
  15.  
  16. void displayinput()
  17. {
  18. unsigned i;
  19. unsigned j;
  20.  
  21. i=0;
  22. while (kana_buf[i])
  23.   {
  24.   if (kana_buf[i]&0x80)
  25.     {
  26.     j=kana_buf[i]&0x7f;
  27.     if (j>='0') j-=8;
  28.     j-='!';
  29.     j*=94;
  30.     j+=(kana_buf[i+1]&0x7f)-'!';
  31.  
  32.     (*graph_put)(j,0,i++);
  33.     }
  34.     else
  35.     (*graph_ascii_put)(kana_buf[i],0,i);
  36.   i++;
  37.   }
  38. (*graph_clear)(0,i,1,80-i);
  39. if (inputmode!=INPUT_VT100)
  40.   (*graph_set)(0,i,1,1);
  41. }
  42.  
  43.  
  44. void ChangeInput(unsigned mode)
  45. {
  46. inputmode=mode;
  47. kana_string[kana_ptr=0]=0;
  48. kana_buf[0]=0;
  49. if (inputmode==INPUT_VT100)
  50.   {
  51.   if (fix_jis)
  52.     {
  53.     if (sixteen_encoding==SHIFT_JIS)
  54.       strcpy(kana_buf,"SJIS|f|F5:VT320 F6:hiragana F7:katakana F8:EUC/SJIS F9:refresh CTRL+F10:quit");
  55.       else
  56.       strcpy(kana_buf,"EUC |f|F5:VT320 F6:hiragana F7:katakana F8:EUC/SJIS F9:refresh CTRL+F10:quit");
  57.     }
  58.     else
  59.     {
  60.     if (sixteen_encoding==SHIFT_JIS)
  61.       strcpy(kana_buf,"SJIS| |F5:VT320 F6:hiragana F7:katakana F8:EUC/SJIS F9:refresh CTRL+F10:quit");
  62.       else
  63.       strcpy(kana_buf,"EUC | |F5:VT320 F6:hiragana F7:katakana F8:EUC/SJIS F9:refresh CTRL+F10:quit");
  64.     }
  65.   }
  66. displayinput();
  67. }
  68.  
  69.  
  70. void InputInit()
  71. {
  72. ChangeInput(INPUT_VT100);
  73. }
  74.  
  75.  
  76. void DoInput(unsigned scancode)
  77. {
  78. unsigned char c;
  79.  
  80. if (inputmode==INPUT_VT100)
  81.   TransKey(scancode);
  82.   else
  83.   {
  84.   c=scancode%256;
  85.   switch(c)
  86.     {
  87.     case 0x08:              /* backspace */
  88.       if (kana_ptr)
  89.         {
  90.         kana_ptr--;
  91.         kana_string[kana_ptr]=0;
  92.         }
  93.       break;
  94.  
  95.     case 0x20:
  96.     case 0x0D:              /* carriage return */
  97.       if (kana_ptr==0)
  98.         com_send(0x0D);
  99.         else
  100.         {
  101.         kana_ptr=0;
  102.         while (kana_buf[kana_ptr])
  103.           {
  104.           if (kana_buf[kana_ptr]&0x80)
  105.             {
  106.             com_send(0x1b); com_send('$'); com_send('B');
  107.             while (kana_buf[kana_ptr]&0x80)
  108.               {
  109.               com_send(kana_buf[kana_ptr++]&0x7F);
  110.               com_send(kana_buf[kana_ptr++]&0x7F);
  111.               }
  112.             com_send(0x1b); com_send('('); com_send('B');
  113.             }
  114.             else
  115.             com_send(kana_buf[kana_ptr++]);
  116.           }
  117.         if (c==0x20)
  118.           com_send(0x0D);
  119.         }
  120.       ChangeInput(INPUT_VT100);
  121.       return;
  122.  
  123.     default:
  124.       if (kana_ptr<79)
  125.         {
  126.         kana_string[kana_ptr++]=(scancode%256);
  127.         kana_string[kana_ptr]=0;
  128.         }
  129.     }
  130.   if (inputmode==INPUT_HIRAGANA)
  131.     romajitohiragana(kana_buf,kana_string);
  132.     else
  133.     romajitokatakana(kana_buf,kana_string);
  134.   displayinput();
  135.   }
  136. }
  137.