File: convert.c

package info (click to toggle)
chinput 3.0.2-8
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,124 kB
  • ctags: 2,806
  • sloc: ansic: 52,549; makefile: 165; perl: 23
file content (126 lines) | stat: -rw-r--r-- 2,508 bytes parent folder | download | duplicates (3)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
###
### This file is part of
###
###                        TurboLinux  ZWinPro
###
###                 Copyright (C) 1999-2000 TurboLinux, Inc. 
###                        All Rights Reserved
### Distributed under the terms of the GNU General Public License (GPL)
###
###
### Authors:     TurboLinux Chinese Development Team:
###              Justin Yu   <justiny@turbolinux.com.cn>
###              Sean Chen   <seanc@turbolinux.com.cn>
###              Daniel Fang <danf@turbolinux.com.cn>
### WWW:         http://www.turbolinux.com.cn/ZWinPro/
### FTP:         ftp://ftp.turbolinux.com.cn/pub/ZWinPro/
###
*/

#include <string.h>
#include "table.h"

void gbchar_big5char(char *gb, char *big5)
{
	int i;

	for(i=0; i<TABLENUM; i++){
		if(gb[0] == hc_g2b[i].gb[0] &&
		   gb[1] == hc_g2b[i].gb[1]) {
			big5[0] = hc_g2b[i].big5[0];
			big5[1] = hc_g2b[i].big5[1];
			return;
		}
	}

	strcpy(big5, "");	//0xA1BC

}

void big5char_gbchar(char *big5, char *gb)
{
        int i;

        for(i=0; i<TABLENUM; i++){
                if(big5[0] == hc_g2b[i].big5[0] &&
                   big5[1] == hc_g2b[i].big5[1]) {
                        gb[0] = hc_g2b[i].gb[0];
                        gb[1] = hc_g2b[i].gb[1];
                        return;
                }
        }

        strcpy(gb, "");
}


void gbstring_big5string(char *gbstr, char *big5str, int n)
{
	int i;
	char b5[3];

	strcpy(big5str, "");

	if(!gbstr) return;

	for(i=0; i<n/2; i++){
		gbchar_big5char(gbstr+i*2, b5);
		strncat(big5str, b5, 2);
	}
}

void gbmixstring_big5mixstring(char *gbmixstr, char *big5mixstr, int n)
{
	int i;
	char b5[3];
	strcpy(big5mixstr, "");
	if(!gbmixstr) return;

	for(i=0; i<n; i++){
		if(gbmixstr[i] & 0x80){
			gbchar_big5char(gbmixstr+i, b5);
			strncat(big5mixstr, b5, 2);
			i++;
		} else {
			big5mixstr[i] = gbmixstr[i];
			big5mixstr[i+1] = '\0';
		}
	}
}

void big5string_gbstring(char *big5str, char *gbstr, int n)
{
        int i;
        char gb[3];

        strcpy(gbstr, "");

        if(!big5str) return;

        for(i=0; i<n/2; i++){
                big5char_gbchar(big5str+i*2, gb);
                strncat(gbstr, gb, 2);
        }
}


void big5mixstring_gbmixstring(char *big5mixstr, char *gbmixstr, int n)
{
	int i;
	char gb[3];
	strcpy(gbmixstr, "");
	if(!big5mixstr) return;

	for(i=0; i<n; i++){
		if(big5mixstr[i] & 0x80){
			big5char_gbchar(big5mixstr+i, gb);
			strncat(gbmixstr, gb, 2);
			i++;
		} else {
			gbmixstr[i] = big5mixstr[i];
			gbmixstr[i+1] = '\0';
		}
	}
}