dec.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "libkcc.h"
  2. /*---------------------------------------------------------------------
  3. TYPE
  4. table
  5. NAME
  6. katakana, hiragana, dakuon - JIS X0201 kana to JIS kanji in DEC
  7. ---------------------------------------------------------------------*/
  8. unsigned short katakana[] = {
  9. 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1,
  10. 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3,
  11. 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad,
  12. 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd,
  13. 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc,
  14. 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de,
  15. 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9,
  16. 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab, 0xa1ac,
  17. };
  18. unsigned short hiragana[] = {
  19. 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa4f2, 0xa4a1,
  20. 0xa4a3, 0xa4a5, 0xa4a7, 0xa4a9, 0xa4e3, 0xa4e5, 0xa4e7, 0xa4c3,
  21. 0xa1bc, 0xa4a2, 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ad,
  22. 0xa4af, 0xa4b1, 0xa4b3, 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd,
  23. 0xa4bf, 0xa4c1, 0xa4c4, 0xa4c6, 0xa4c8, 0xa4ca, 0xa4cb, 0xa4cc,
  24. 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d2, 0xa4d5, 0xa4d8, 0xa4db, 0xa4de,
  25. 0xa4df, 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e6, 0xa4e8, 0xa4e9,
  26. 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ef, 0xa4f3, 0xa1ab, 0xa1ac,
  27. };
  28. unsigned char dakuon[] = {
  29. 0, 0, 0, 0, 0, 0, 0, 0,
  30. 0, 0, 0, 0, 0, 0, 0, 0,
  31. 0, 0, 0, 0, 0, 0, 1, 1,
  32. 1, 1, 1, 1, 1, 1, 1, 1,
  33. 1, 1, 1, 1, 1, 0, 0, 0,
  34. 0, 0, 3, 3, 3, 3, 3, 0,
  35. 0, 0, 0, 0, 0, 0, 0, 0,
  36. 0, 0, 0, 0, 0, 0, 0, 0,
  37. };
  38. /*********************************************************/
  39. unsigned short *kanatbl = katakana;
  40. int lastkana=0;
  41. extern bool nogaiji;
  42. /*---------------------------------------------------------------------
  43. NAME
  44. decascii
  45. ---------------------------------------------------------------------*/
  46. void Kcc_decascii(ddd, c)
  47. register int c;
  48. char **ddd;
  49. {
  50. if (lastkana) {
  51. **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
  52. **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
  53. lastkana = 0;
  54. }
  55. **ddd = c; (*ddd)++;
  56. }
  57. /*---------------------------------------------------------------------
  58. NAME
  59. decgaiji
  60. ---------------------------------------------------------------------*/
  61. void Kcc_decgaiji(ddd, c1, c2)
  62. register int c1, c2;
  63. char **ddd;
  64. {
  65. if (lastkana) {
  66. **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
  67. **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
  68. lastkana = 0;
  69. }
  70. if (nogaiji) {
  71. **ddd = ZENPAD >> 8 | 0x80; (*ddd)++;
  72. **ddd = (ZENPAD & 0xff) | 0x80; (*ddd)++;
  73. } else {
  74. **ddd = c1 | 0x80; (*ddd)++;
  75. **ddd = c2; (*ddd)++;
  76. }
  77. }
  78. /*---------------------------------------------------------------------
  79. NAME
  80. deckana
  81. ---------------------------------------------------------------------*/
  82. void Kcc_deckana(ddd, c)
  83. register int c;
  84. char **ddd;
  85. {
  86. register int cc;
  87. int i;
  88. extern unsigned char dakuon[];
  89. if (lastkana) {
  90. cc = kanatbl[lastkana];
  91. if ((c == 0x5e || c == 0x5f) &&
  92. (i = dakuon[lastkana] & (c == 0x5e ? 1 : 2))) {
  93. cc += i;
  94. c = -1;
  95. }
  96. **ddd = cc >> 8; (*ddd)++;
  97. **ddd = cc & 0xff; (*ddd)++;
  98. }
  99. if (c < 0x21 || 0x5f < c) {
  100. if (c > 0) {
  101. **ddd = ZENPAD >> 8; (*ddd)++;
  102. **ddd = ZENPAD & 0xff; (*ddd)++;
  103. }
  104. lastkana = 0;
  105. } else
  106. lastkana = c - 0x20;
  107. }
  108. /*---------------------------------------------------------------------
  109. NAME
  110. deckanji
  111. ---------------------------------------------------------------------*/
  112. void Kcc_deckanji(ddd, c1, c2)
  113. register int c1, c2;
  114. char **ddd;
  115. {
  116. if (lastkana) {
  117. **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
  118. **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
  119. lastkana = 0;
  120. }
  121. **ddd = c1 | 0x80; (*ddd)++;
  122. **ddd = c2 | 0x80; (*ddd)++;
  123. }