1
--- slang-1.4.5/src/slang.h.acs 2002-07-09 00:03:57.000000000 -0400
2
+++ slang-1.4.5/src/slang.h 2002-07-09 00:11:06.000000000 -0400
6
typedef int SLsmg_Char_Type;
7
+extern SLtt_Char_Type SLcurses_Acs_Map [128];
8
+#define acs_map SLcurses_Acs_Map
9
#define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF)
10
#define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF)
11
#define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24))
12
@@ -1396,7 +1398,11 @@
13
extern void SLsmg_set_screen_start (int *, int *);
14
extern void SLsmg_draw_hline (unsigned int);
15
extern void SLsmg_draw_vline (int);
17
+extern void SLsmg_draw_object (int, int, SLsmg_Char_Type);
19
extern void SLsmg_draw_object (int, int, unsigned char);
21
extern void SLsmg_draw_box (int, int, unsigned int, unsigned int);
22
extern int SLsmg_get_column(void);
23
extern int SLsmg_get_row(void);
25
extern int SLsmg_Display_Eight_Bit;
26
extern int SLsmg_Tab_Width;
28
+extern int SLsmg_Is_Unicode;
29
+extern int SLsmg_Setlocale;
31
#define SLSMG_NEWLINE_IGNORED 0 /* default */
32
#define SLSMG_NEWLINE_MOVES 1 /* moves to next line, column 0 */
33
#define SLSMG_NEWLINE_SCROLLS 2 /* moves but scrolls at bottom of screen */
34
@@ -1465,31 +1474,79 @@
35
# define SLSMG_BOARD_CHAR '#'
36
# define SLSMG_BLOCK_CHAR '#'
38
-# define SLSMG_HLINE_CHAR 'q'
39
-# define SLSMG_VLINE_CHAR 'x'
40
-# define SLSMG_ULCORN_CHAR 'l'
41
-# define SLSMG_URCORN_CHAR 'k'
42
-# define SLSMG_LLCORN_CHAR 'm'
43
-# define SLSMG_LRCORN_CHAR 'j'
44
-# define SLSMG_CKBRD_CHAR 'a'
45
-# define SLSMG_RTEE_CHAR 'u'
46
-# define SLSMG_LTEE_CHAR 't'
47
-# define SLSMG_UTEE_CHAR 'w'
48
-# define SLSMG_DTEE_CHAR 'v'
49
-# define SLSMG_PLUS_CHAR 'n'
50
-# define SLSMG_DIAMOND_CHAR '`'
51
-# define SLSMG_DEGREE_CHAR 'f'
52
-# define SLSMG_PLMINUS_CHAR 'g'
53
-# define SLSMG_BULLET_CHAR '~'
54
-# define SLSMG_LARROW_CHAR ','
55
-# define SLSMG_RARROW_CHAR '+'
56
-# define SLSMG_DARROW_CHAR '.'
57
-# define SLSMG_UARROW_CHAR '-'
58
-# define SLSMG_BOARD_CHAR 'h'
59
-# define SLSMG_BLOCK_CHAR '0'
60
+# define SLSMG_HLINE_CHAR (acs_map['q'])
61
+# define SLSMG_VLINE_CHAR (acs_map['x'])
62
+# define SLSMG_ULCORN_CHAR (acs_map['l'])
63
+# define SLSMG_URCORN_CHAR (acs_map['k'])
64
+# define SLSMG_LLCORN_CHAR (acs_map['m'])
65
+# define SLSMG_LRCORN_CHAR (acs_map['j'])
66
+# define SLSMG_CKBRD_CHAR (acs_map['a'])
67
+# define SLSMG_RTEE_CHAR (acs_map['u'])
68
+# define SLSMG_LTEE_CHAR (acs_map['t'])
69
+# define SLSMG_UTEE_CHAR (acs_map['v'])
70
+# define SLSMG_DTEE_CHAR (acs_map['w'])
71
+# define SLSMG_PLUS_CHAR (acs_map['n'])
72
+# define SLSMG_DIAMOND_CHAR (acs_map['`'])
73
+# define SLSMG_DEGREE_CHAR (acs_map['f'])
74
+# define SLSMG_PLMINUS_CHAR (acs_map['g'])
75
+# define SLSMG_BULLET_CHAR (acs_map['~'])
76
+# define SLSMG_LARROW_CHAR (acs_map[','])
77
+# define SLSMG_RARROW_CHAR (acs_map['+'])
78
+# define SLSMG_DARROW_CHAR (acs_map['.'])
79
+# define SLSMG_UARROW_CHAR (acs_map['-'])
80
+# define SLSMG_BOARD_CHAR (acs_map['h'])
81
+# define SLSMG_BLOCK_CHAR (acs_map['0'])
83
+# define SLSMG_HLINE_CHAR_TERM 'q'
84
+# define SLSMG_VLINE_CHAR_TERM 'x'
85
+# define SLSMG_ULCORN_CHAR_TERM 'l'
86
+# define SLSMG_URCORN_CHAR_TERM 'k'
87
+# define SLSMG_LLCORN_CHAR_TERM 'm'
88
+# define SLSMG_LRCORN_CHAR_TERM 'j'
89
+# define SLSMG_CKBRD_CHAR_TERM 'a'
90
+# define SLSMG_RTEE_CHAR_TERM 'u'
91
+# define SLSMG_LTEE_CHAR_TERM 't'
92
+# define SLSMG_UTEE_CHAR_TERM 'v'
93
+# define SLSMG_DTEE_CHAR_TERM 'w'
94
+# define SLSMG_PLUS_CHAR_TERM 'n'
95
+# define SLSMG_DIAMOND_CHAR_TERM '`'
96
+# define SLSMG_DEGREE_CHAR_TERM 'f'
97
+# define SLSMG_PLMINUS_CHAR_TERM 'g'
98
+# define SLSMG_BULLET_CHAR_TERM '~'
99
+# define SLSMG_LARROW_CHAR_TERM ','
100
+# define SLSMG_RARROW_CHAR_TERM '+'
101
+# define SLSMG_DARROW_CHAR_TERM '.'
102
+# define SLSMG_UARROW_CHAR_TERM '-'
103
+# define SLSMG_BOARD_CHAR_TERM 'h'
104
+# define SLSMG_BLOCK_CHAR_TERM '0'
106
#endif /* IBMPC_SYSTEM */
109
+# define SLSMG_HLINE_CHAR_UNICODE 0x2500
110
+# define SLSMG_VLINE_CHAR_UNICODE 0x2502
111
+# define SLSMG_ULCORN_CHAR_UNICODE 0x250c
112
+# define SLSMG_URCORN_CHAR_UNICODE 0x2510
113
+# define SLSMG_LLCORN_CHAR_UNICODE 0x2514
114
+# define SLSMG_LRCORN_CHAR_UNICODE 0x2518
115
+# define SLSMG_RTEE_CHAR_UNICODE 0x2524
116
+# define SLSMG_LTEE_CHAR_UNICODE 0x251c
117
+# define SLSMG_UTEE_CHAR_UNICODE 0x2534
118
+# define SLSMG_DTEE_CHAR_UNICODE 0x252c
119
+# define SLSMG_PLUS_CHAR_UNICODE 0x253c
120
+# define SLSMG_CKBRD_CHAR_UNICODE 0x2592
121
+# define SLSMG_DIAMOND_CHAR_UNICODE 0x25c6
122
+# define SLSMG_DEGREE_CHAR_UNICODE 0x00b0
123
+# define SLSMG_PLMINUS_CHAR_UNICODE 0x00b1
124
+# define SLSMG_BULLET_CHAR_UNICODE 0x00b7
125
+# define SLSMG_LARROW_CHAR_UNICODE 0x2190
126
+# define SLSMG_RARROW_CHAR_UNICODE 0x2192
127
+# define SLSMG_DARROW_CHAR_UNICODE 0x2193
128
+# define SLSMG_UARROW_CHAR_UNICODE 0x2191
129
+# define SLSMG_BOARD_CHAR_UNICODE 0x2592
130
+# define SLSMG_BLOCK_CHAR_UNICODE 0x25ae
134
# define SLSMG_COLOR_BLACK 0x000000
135
# define SLSMG_COLOR_RED 0x000001
136
--- slang-1.4.5/src/slcurses.c.acs 2002-07-09 00:03:57.000000000 -0400
137
+++ slang-1.4.5/src/slcurses.c 2002-07-09 00:09:03.000000000 -0400
138
@@ -331,40 +331,63 @@
139
/* SLtt_set_mono (A_BLINK >> 8, NULL, SLTT_BLINK_MASK); */
140
SLtt_set_mono ((A_BOLD|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_BOLD_MASK);
141
SLtt_set_mono ((A_REVERSE|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_REV_MASK);
143
+ SLcurses_init_acs_map();
145
+ return SLcurses_Stdscr;
148
+void SLcurses_init_acs_map()
150
if (SLtt_Has_Alt_Charset)
152
- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = SLSMG_ULCORN_CHAR | A_ALTCHARSET;
153
- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = SLSMG_URCORN_CHAR | A_ALTCHARSET;
154
- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = SLSMG_LLCORN_CHAR | A_ALTCHARSET;
155
- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = SLSMG_LRCORN_CHAR | A_ALTCHARSET;
156
- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = SLSMG_UTEE_CHAR | A_ALTCHARSET;
157
- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = SLSMG_DTEE_CHAR | A_ALTCHARSET;
158
- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = SLSMG_LTEE_CHAR | A_ALTCHARSET;
159
- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = SLSMG_RTEE_CHAR | A_ALTCHARSET;
160
- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = SLSMG_VLINE_CHAR | A_ALTCHARSET;
161
- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = SLSMG_HLINE_CHAR | A_ALTCHARSET;
162
- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = SLSMG_PLUS_CHAR | A_ALTCHARSET;
163
- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = SLSMG_CKBRD_CHAR | A_ALTCHARSET;
164
+ if (SLsmg_Is_Unicode)
166
+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_UNICODE;
167
+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_UNICODE;
168
+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_UNICODE;
169
+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_UNICODE;
170
+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_UNICODE;
171
+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_UNICODE;
172
+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_UNICODE;
173
+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_UNICODE;
174
+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_UNICODE;
175
+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_UNICODE;
176
+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_UNICODE;
177
+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_UNICODE;
181
+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_TERM | A_ALTCHARSET;
182
+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_TERM | A_ALTCHARSET;
183
+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_TERM | A_ALTCHARSET;
184
+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_TERM | A_ALTCHARSET;
185
+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_TERM | A_ALTCHARSET;
186
+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_TERM | A_ALTCHARSET;
187
+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_TERM | A_ALTCHARSET;
188
+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_TERM | A_ALTCHARSET;
189
+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_TERM | A_ALTCHARSET;
190
+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_TERM | A_ALTCHARSET;
191
+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_TERM | A_ALTCHARSET;
192
+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_TERM | A_ALTCHARSET;
197
/* ugly defaults to use on terminals which don't support graphics */
198
- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = '+';
199
- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = '+';
200
- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = '+';
201
- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = '+';
202
- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = '+';
203
- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = '+';
204
- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = '+';
205
- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = '+';
206
- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = '|';
207
- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = '-';
208
- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = '+';
209
- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = '#';
210
+ SLcurses_Acs_Map['l'] = '+';
211
+ SLcurses_Acs_Map['k'] = '+';
212
+ SLcurses_Acs_Map['m'] = '+';
213
+ SLcurses_Acs_Map['j'] = '+';
214
+ SLcurses_Acs_Map['v'] = '+';
215
+ SLcurses_Acs_Map['w'] = '+';
216
+ SLcurses_Acs_Map['t'] = '+';
217
+ SLcurses_Acs_Map['u'] = '+';
218
+ SLcurses_Acs_Map['x'] = '|';
219
+ SLcurses_Acs_Map['q'] = '-';
220
+ SLcurses_Acs_Map['n'] = '+';
221
+ SLcurses_Acs_Map['a'] = '#';
224
- return SLcurses_Stdscr;
227
int SLcurses_wattrset (SLcurses_Window_Type *w, SLtt_Char_Type ch)
228
--- slang-1.4.5/src/slcurses.h.acs 2002-02-10 02:39:19.000000000 -0500
229
+++ slang-1.4.5/src/slcurses.h 2002-07-09 00:03:57.000000000 -0400
232
extern int SLcurses_nodelay (SLcurses_Window_Type *, int);
233
extern SLcurses_Window_Type *SLcurses_initscr (void);
234
+extern void SLcurses_init_acs_map (void);
235
#define initscr SLcurses_initscr
237
extern int SLcurses_cbreak (void);
238
@@ -222,21 +222,21 @@
239
extern SLtt_Char_Type SLcurses_Acs_Map [128];
240
#define acs_map SLcurses_Acs_Map
242
-#define ACS_ULCORNER (acs_map[SLSMG_ULCORN_CHAR])
243
-#define ACS_URCORNER (acs_map[SLSMG_URCORN_CHAR])
244
-#define ACS_LRCORNER (acs_map[SLSMG_LRCORN_CHAR])
245
-#define ACS_LLCORNER (acs_map[SLSMG_LLCORN_CHAR])
246
-#define ACS_TTEE (acs_map[SLSMG_UTEE_CHAR])
247
-#define ACS_LTEE (acs_map[SLSMG_LTEE_CHAR])
248
-#define ACS_RTEE (acs_map[SLSMG_RTEE_CHAR])
249
-#define ACS_BTEE (acs_map[SLSMG_DTEE_CHAR])
250
-#define ACS_PLUS (acs_map[SLSMG_PLUS_CHAR])
251
-#define ACS_VLINE (acs_map[SLSMG_VLINE_CHAR])
252
-#define ACS_HLINE (acs_map[SLSMG_HLINE_CHAR])
253
+#define ACS_ULCORNER SLSMG_ULCORN_CHAR
254
+#define ACS_URCORNER SLSMG_URCORN_CHAR
255
+#define ACS_LRCORNER SLSMG_LRCORN_CHAR
256
+#define ACS_LLCORNER SLSMG_LLCORN_CHAR
257
+#define ACS_TTEE SLSMG_UTEE_CHAR
258
+#define ACS_LTEE SLSMG_LTEE_CHAR
259
+#define ACS_RTEE SLSMG_RTEE_CHAR
260
+#define ACS_BTEE SLSMG_DTEE_CHAR
261
+#define ACS_PLUS SLSMG_PLUS_CHAR
262
+#define ACS_VLINE SLSMG_VLINE_CHAR
263
+#define ACS_HLINE SLSMG_HLINE_CHAR
266
#define ACS_DIAMOND '&'
267
-#define ACS_CKBOARD (acs_map[SLSMG_CKBRD_CHAR])
268
+#define ACS_CKBOARD SLSMG_CKBRD_CHAR
269
#define ACS_DEGREE 'o'
270
#define ACS_PLMINUS '+'
271
#define ACS_BULLET '*'
272
--- slang-1.4.5/src/slsmg.c.acs 2002-07-09 00:03:57.000000000 -0400
273
+++ slang-1.4.5/src/slsmg.c 2002-07-09 00:03:57.000000000 -0400
278
+#include "slcurses.h"
282
typedef struct Screen_Type
288
-#define ALT_CHAR_FLAG 0x80
289
+static int ALT_CHAR_FLAG=0x80;
291
-#define ALT_CHAR_FLAG 0x00
292
+static int ALT_CHAR_FLAG=0x00;
295
#if SLTT_HAS_NON_BCE_SUPPORT && !defined(IBMPC_SYSTEM)
297
static int Bce_Color_Offset;
300
+int SLsmg_Is_Unicode = 0;
301
+int SLsmg_Setlocale = 1;
302
int SLsmg_Newline_Behavior = 0;
303
int SLsmg_Backspace_Moves = 0;
304
/* Backward compatibility. Not used. */
306
return;/* alt chars not used and the alt bit
307
* is used to indicate a blink.
309
+ if (SLsmg_Is_Unicode)
310
+ ALT_CHAR_FLAG=0x00;
312
if (i) This_Alt_Char = ALT_CHAR_FLAG;
313
else This_Alt_Char = 0;
316
int alt_char_set_flag;
318
+ if (SLsmg_Is_Unicode)
319
+ ALT_CHAR_FLAG = 0x00;
320
alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG)
321
&& ((tt_Use_Blink_For_ACS == NULL)
322
|| (*tt_Use_Blink_For_ACS == 0)));
323
@@ -1221,6 +1230,20 @@
327
+static void SLsmg_check_unicode(void)
331
+ if (SLsmg_Setlocale)
332
+ s = setlocale(LC_ALL, "");
334
+ s = setlocale(LC_ALL, NULL);
335
+ if (s && (strstr(s,"UTF-8") || strstr(s,"utf8"))) {
336
+ SLsmg_Is_Unicode = 1;
339
+ SLsmg_Is_Unicode = 0;
342
static int init_smg (void)
344
@@ -1242,6 +1265,8 @@
345
This_Col = This_Row = Start_Col = Start_Row = 0;
348
+ SLsmg_check_unicode ();
349
+ SLcurses_init_acs_map ();
353
@@ -1386,7 +1411,11 @@
358
+void SLsmg_draw_object (int r, int c, SLsmg_Char_Type object)
360
void SLsmg_draw_object (int r, int c, unsigned char object)
363
This_Row = r; This_Col = c;
365
@@ -1405,7 +1434,7 @@
367
void SLsmg_draw_hline (unsigned int n)
369
- static unsigned char hbuf[16];
370
+ SLsmg_Char_Type ch = SLSMG_HLINE_CHAR;
373
int final_col = This_Col + (int) n;
374
@@ -1421,11 +1450,6 @@
380
- SLMEMSET ((char *) hbuf, SLSMG_HLINE_CHAR, 16);
383
n = (unsigned int)(cmax - cmin);
386
@@ -1433,10 +1457,10 @@
387
This_Color |= ALT_CHAR_FLAG;
390
- SLsmg_write_nchars ((char *) hbuf, n % 16);
391
- while (count-- > 0)
392
+ SLsmg_draw_object(This_Row, This_Col, ch);
395
- SLsmg_write_nchars ((char *) hbuf, 16);
396
+ SLsmg_draw_object(This_Row, This_Col, ch);
399
This_Color = save_color;
400
@@ -1445,7 +1469,7 @@
402
void SLsmg_draw_vline (int n)
404
- unsigned char ch = SLSMG_VLINE_CHAR;
405
+ SLsmg_Char_Type ch = SLSMG_VLINE_CHAR;
406
int c = This_Col, rmin, rmax;
407
int final_row = This_Row + n;
409
@@ -1466,7 +1490,7 @@
410
for (This_Row = rmin; This_Row < rmax; This_Row++)
413
- SLsmg_write_nchars ((char *) &ch, 1);
414
+ SLsmg_draw_object (This_Row, This_Col, ch);
417
This_Col = c; This_Row = final_row;