Commit 8b88ea8d8365025c6603bf37453748970084f26a

Authored by Perry Werneck
1 parent e42f96cc
Exists in master and in 1 other branch develop

Fixing CG char 0x00.

Showing 1 changed file with 22 additions and 19 deletions   Show diff stats
src/terminal/drawing/draw.c
... ... @@ -257,24 +257,12 @@ static void draw_small_text(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo
257 257  
258 258 static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, GdkRectangle *rect)
259 259 {
260   - // https://unicode.org/charts/PDF/U2300.pdf
261   - static const struct CharList
262   - {
263   - unsigned char chr;
264   - const gchar * utf;
265   - } charlist[] =
266   - {
267   - { 0x8c, "≤" }, // CG 0xf7, less or equal "≤"
268   - { 0xae, "≥" }, // CG 0xd9, greater or equal "≥"
269   - { 0xbe, "≠" }, // CG 0x3e, not equal "≠"
270   - { 0xad, "[" }, // "["
271   - { 0xbd, "]" }, // "]"
272   - { 0xb8, "÷" }, // Division Sign ÷
273   -
274   - };
275   -
276 260 size_t ix;
277 261  
  262 + // 0x00 is always blank.
  263 + if(!chr)
  264 + return TRUE;
  265 +
278 266 if(chr >= 0xf0 && chr <= 0xf9)
279 267 {
280 268 char str[] = { '0' + (chr-0xF0), 0 };
... ... @@ -289,6 +277,23 @@ static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, Gdk
289 277 return TRUE;
290 278 }
291 279  
  280 + // Check for UTF-8 CG - https://unicode.org/charts/PDF/U2300.pdf
  281 + static const struct CharList
  282 + {
  283 + unsigned char chr;
  284 + const gchar * utf;
  285 + } charlist[] =
  286 + {
  287 + { 0x8c, "≤" }, // CG 0xf7, less or equal "≤"
  288 + { 0xae, "≥" }, // CG 0xd9, greater or equal "≥"
  289 + { 0xbe, "≠" }, // CG 0xbe, not equal "≠"
  290 + { 0xad, "[" }, // "["
  291 + { 0xbd, "]" }, // "]"
  292 + { 0xb8, "÷" }, // Division Sign ÷
  293 + { 0x90, "⎕" }, // APL FUNCTIONAL SYMBOL QUAD
  294 + };
  295 +
  296 +
292 297 for(ix = 0; ix < G_N_ELEMENTS(charlist); ix++)
293 298 {
294 299 if(chr == charlist[ix].chr)
... ... @@ -333,6 +338,7 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270
333 338 else if(attr & LIB3270_ATTR_CG)
334 339 {
335 340  
  341 + //http://www.prycroft6.com.au/misc/3270eds.html
336 342 switch(chr)
337 343 {
338 344 case 0xd3: // CG 0xab, plus
... ... @@ -407,10 +413,7 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270
407 413 default:
408 414  
409 415 if(!draw_cg(cr, chr, font, rect))
410   - {
411 416 lib3270_write_screen_trace(session,"I don't known how to draw CG character %02x\n",(int) chr);
412   - cairo_rectangle(cr, rect->x+1, rect->y+1, rect->width-2, rect->height-2);
413   - }
414 417  
415 418 }
416 419 }
... ...