Rev 3540 | Rev 5082 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3540 | Rev 4135 | ||
---|---|---|---|
1 | ; fetch the UTF-8 character in string+offs to char |
1 | ; fetch the UTF-8 character in string+offs to char |
2 | ; common part for all encodings: translate pseudographics |
2 | ; common part for all encodings: translate pseudographics |
3 | ; Pseudographics for the boot screen: |
3 | ; Pseudographics for the boot screen: |
4 | ; 0x2500 -> 0xC4, 0x2502 -> 0xB3, 0x250C -> 0xDA, 0x2510 -> 0xBF, |
4 | ; 0x2500 -> 0xC4, 0x2502 -> 0xB3, 0x250C -> 0xDA, 0x2510 -> 0xBF, |
5 | ; 0x2514 -> 0xC0, 0x2518 -> 0xD9, 0x252C -> 0xC2, 0x2534 -> 0xC1, 0x2551 -> 0xBA |
5 | ; 0x2514 -> 0xC0, 0x2518 -> 0xD9, 0x252C -> 0xC2, 0x2534 -> 0xC1, 0x2551 -> 0xBA |
6 | macro fetch_utf8_char string, offs, char, graph |
6 | macro fetch_utf8_char string, offs, char, graph |
7 | { local first_byte, b |
7 | { local first_byte, b |
8 | virtual at 0 |
8 | virtual at 0 |
9 | db string |
9 | db string |
10 | if offs >= $ |
10 | if offs >= $ |
11 | char = -1 |
11 | char = -1 |
12 | else |
12 | else |
13 | ; fetch first byte |
13 | ; fetch first byte |
14 | load first_byte byte from offs |
14 | load first_byte byte from offs |
15 | if first_byte < 0x80 |
15 | if first_byte < 0x80 |
16 | char = first_byte |
16 | char = first_byte |
17 | offs = offs + 1 |
17 | offs = offs + 1 |
18 | else if first_byte < 0xC0 |
18 | else if first_byte < 0xC0 |
19 | .err Invalid UTF-8 string |
19 | .err Invalid UTF-8 string |
20 | else if first_byte < 0xE0 |
20 | else if first_byte < 0xE0 |
21 | char = first_byte and 0x1F |
21 | char = first_byte and 0x1F |
22 | load b byte from offs + 1 |
22 | load b byte from offs + 1 |
23 | char = (char shl 6) + (b and 0x3F) |
23 | char = (char shl 6) + (b and 0x3F) |
24 | offs = offs + 2 |
24 | offs = offs + 2 |
25 | else if first_byte < 0xF0 |
25 | else if first_byte < 0xF0 |
26 | char = first_byte and 0xF |
26 | char = first_byte and 0xF |
27 | load b byte from offs + 1 |
27 | load b byte from offs + 1 |
28 | char = (char shl 6) + (b and 0x3F) |
28 | char = (char shl 6) + (b and 0x3F) |
29 | load b byte from offs + 2 |
29 | load b byte from offs + 2 |
30 | char = (char shl 6) + (b and 0x3F) |
30 | char = (char shl 6) + (b and 0x3F) |
31 | offs = offs + 3 |
31 | offs = offs + 3 |
32 | else if first_byte < 0xF8 |
32 | else if first_byte < 0xF8 |
33 | char = first_byte and 0x7 |
33 | char = first_byte and 0x7 |
34 | load b byte from offs + 1 |
34 | load b byte from offs + 1 |
35 | char = (char shl 6) + (b and 0x3F) |
35 | char = (char shl 6) + (b and 0x3F) |
36 | load b byte from offs + 2 |
36 | load b byte from offs + 2 |
37 | char = (char shl 6) + (b and 0x3F) |
37 | char = (char shl 6) + (b and 0x3F) |
38 | load b byte from offs + 3 |
38 | load b byte from offs + 3 |
39 | char = (char shl 6) + (b and 0x3F) |
39 | char = (char shl 6) + (b and 0x3F) |
40 | offs = offs + 4 |
40 | offs = offs + 4 |
41 | else |
41 | else |
42 | .err Invalid UTF-8 string |
42 | .err Invalid UTF-8 string |
43 | end if |
43 | end if |
44 | end if |
44 | end if |
45 | end virtual |
45 | end virtual |
46 | if char = 0x2500 |
46 | if char = 0x2500 |
47 | graph = 0xC4 |
47 | graph = 0xC4 |
48 | else if char = 0x2502 |
48 | else if char = 0x2502 |
49 | graph = 0xB3 |
49 | graph = 0xB3 |
50 | else if char = 0x250C |
50 | else if char = 0x250C |
51 | graph = 0xDA |
51 | graph = 0xDA |
52 | else if char = 0x2510 |
52 | else if char = 0x2510 |
53 | graph = 0xBF |
53 | graph = 0xBF |
54 | else if char = 0x2514 |
54 | else if char = 0x2514 |
55 | graph = 0xC0 |
55 | graph = 0xC0 |
56 | else if char = 0x2518 |
56 | else if char = 0x2518 |
57 | graph = 0xD9 |
57 | graph = 0xD9 |
58 | else if char = 0x252C |
58 | else if char = 0x252C |
59 | graph = 0xC2 |
59 | graph = 0xC2 |
60 | else if char = 0x2534 |
60 | else if char = 0x2534 |
61 | graph = 0xC1 |
61 | graph = 0xC1 |
62 | else if char = 0x2551 |
62 | else if char = 0x2551 |
63 | graph = 0xBA |
63 | graph = 0xBA |
64 | else |
64 | else |
65 | graph = 0 |
65 | graph = 0 |
66 | end if |
66 | end if |
67 | } |
67 | } |
68 | 68 | ||
69 | ; Russian: use CP866. |
69 | ; Russian: use CP866. |
70 | ; 0x00-0x7F - trivial map |
70 | ; 0x00-0x7F - trivial map |
71 | ; 0x410-0x43F -> 0x80-0xAF |
71 | ; 0x410-0x43F -> 0x80-0xAF |
72 | ; 0x440-0x44F -> 0xE0-0xEF |
72 | ; 0x440-0x44F -> 0xE0-0xEF |
73 | ; 0x401 -> 0xF0, 0x451 -> 0xF1 |
73 | ; 0x401 -> 0xF0, 0x451 -> 0xF1 |
74 | macro cp866 [arg] |
74 | macro cp866 [arg] |
75 | { local offs, char, graph |
75 | { local offs, char, graph |
76 | offs = 0 |
76 | offs = 0 |
77 | while 1 |
77 | while 1 |
78 | fetch_utf8_char arg, offs, char, graph |
78 | fetch_utf8_char arg, offs, char, graph |
79 | if char = -1 |
79 | if char = -1 |
80 | break |
80 | break |
81 | end if |
81 | end if |
82 | if graph |
82 | if graph |
83 | db graph |
83 | db graph |
84 | else if char < 0x80 |
84 | else if char < 0x80 |
85 | db char |
85 | db char |
86 | else if char = 0x401 |
86 | else if char = 0x401 |
87 | db 0xF0 |
87 | db 0xF0 |
88 | else if char = 0x451 |
88 | else if char = 0x451 |
89 | db 0xF1 |
89 | db 0xF1 |
90 | else if (char < 0x410) | (char > 0x44F) |
90 | else if (char < 0x410) | (char > 0x44F) |
91 | .err Failed to convert to CP866 |
91 | .err Failed to convert to CP866 |
92 | else if char < 0x440 |
92 | else if char < 0x440 |
93 | db char - 0x410 + 0x80 |
93 | db char - 0x410 + 0x80 |
94 | else |
94 | else |
95 | db char - 0x440 + 0xE0 |
95 | db char - 0x440 + 0xE0 |
96 | end if |
96 | end if |
97 | end while |
97 | end while |
98 | } |
98 | } |
- | 99 | ||
- | 100 | struc cp866 [arg] |
|
- | 101 | { |
|
- | 102 | common |
|
- | 103 | cp866 arg |
|
- | 104 | } |
|
99 | 105 | ||
100 | ; Latin-1 encoding |
106 | ; Latin-1 encoding |
101 | ; 0x00-0xFF - trivial map |
107 | ; 0x00-0xFF - trivial map |
102 | macro latin1 [arg] |
108 | macro latin1 [arg] |
103 | { local offs, char, graph |
109 | { local offs, char, graph |
104 | offs = 0 |
110 | offs = 0 |
105 | while 1 |
111 | while 1 |
106 | fetch_utf8_char arg, offs, char, graph |
112 | fetch_utf8_char arg, offs, char, graph |
107 | if char = -1 |
113 | if char = -1 |
108 | break |
114 | break |
109 | end if |
115 | end if |
110 | if graph |
116 | if graph |
111 | db graph |
117 | db graph |
112 | else if char < 0x100 |
118 | else if char < 0x100 |
113 | db char |
119 | db char |
114 | else |
120 | else |
115 | .err Failed to convert to Latin-1 |
121 | .err Failed to convert to Latin-1 |
116 | end if |
122 | end if |
117 | end while |
123 | end while |
118 | } |
124 | } |
- | 125 | ||
- | 126 | struc latin1 [arg] |
|
- | 127 | { |
|
- | 128 | common |
|
- | 129 | latin1 arg |
|
- | 130 | } |
|
119 | 131 | ||
120 | ; CP850 encoding |
132 | ; CP850 encoding |
121 | macro cp850 [arg] |
133 | macro cp850 [arg] |
122 | { local offs, char, graph |
134 | { local offs, char, graph |
123 | offs = 0 |
135 | offs = 0 |
124 | while 1 |
136 | while 1 |
125 | fetch_utf8_char arg, offs, char, graph |
137 | fetch_utf8_char arg, offs, char, graph |
126 | if char = -1 |
138 | if char = -1 |
127 | break |
139 | break |
128 | end if |
140 | end if |
129 | if graph |
141 | if graph |
130 | db graph |
142 | db graph |
131 | else if char < 0x80 |
143 | else if char < 0x80 |
132 | db char |
144 | db char |
133 | else if char = 0xBF |
145 | else if char = 0xBF |
134 | db 0xA8 |
146 | db 0xA8 |
135 | else if char = 0xE1 |
147 | else if char = 0xE1 |
136 | db 0xA0 |
148 | db 0xA0 |
137 | else if char = 0xE9 |
149 | else if char = 0xE9 |
138 | db 0x82 |
150 | db 0x82 |
139 | else if char = 0xED |
151 | else if char = 0xED |
140 | db 0xA1 |
152 | db 0xA1 |
141 | else if char = 0xF3 |
153 | else if char = 0xF3 |
142 | db 0xA2 |
154 | db 0xA2 |
143 | else if char = 0xFA |
155 | else if char = 0xFA |
144 | db 0xA3 |
156 | db 0xA3 |
145 | else |
157 | else |
146 | err Failed to convert to CP850 |
158 | err Failed to convert to CP850 |
147 | end if |
159 | end if |
148 | end while |
160 | end while |
149 | }>>>>>>>>>> |
161 | } |
- | 162 | ||
- | 163 | struc cp850 [arg] |
|
- | 164 | { |
|
- | 165 | common |
|
- | 166 | cp850 arg |
|
- | 167 | }>>>>>>>>>> |