File: e2s.c

package info (click to toggle)
libuconv-ruby 0.4.9-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 3,752 kB
  • ctags: 135
  • sloc: ansic: 160,433; xml: 13,060; ruby: 396; makefile: 51
file content (49 lines) | stat: -rw-r--r-- 775 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * EUC-JP <=> Shift_JIS Conversion Library
 * 1999 by yoshidam
 *
 */

unsigned short
sjis2euc(unsigned short sjis)
{
  register unsigned int ku = sjis >> 8;
  register unsigned int ten = sjis & 255;

  ku = (ku & 0x3f) << 1;
  if (ten > 158) {
    ten -= 158;
  }
  else {
    ku--;
    ten -= 64;
    if (ten <= 62) /* Aug 13, 1999 */
      ten++;
  }
  ten += 32;
  ku += 32;

  return ((ku << 8) | ten ) | 0x8080;
}

unsigned short
euc2sjis(unsigned short euc)
{
  register unsigned int high = (euc >> 8) - 160;
  register unsigned int low = (euc & 255) - 160;

  if (high & 1) {
    high++;
    low += 63;
    if (low >= 127)
      low++;
  }
  else {
    low += 158;
  }
  high = (high/2) | 0x80;
  if (high >= 0xa0)
    high |= 0x40;

  return (high << 8) | low;
}