diff -urN grub-debian-patched/configure.ac grub-0.95+cvs20040624/configure.ac --- grub-debian-patched/configure.ac 2005-09-05 03:57:02.000000000 +0200 +++ grub-0.95+cvs20040624/configure.ac 2005-09-05 03:56:54.000000000 +0200 @@ -610,6 +610,16 @@ [ --disable-serial disable serial terminal support]) AM_CONDITIONAL(SERIAL_SUPPORT, test "x$enable_serial" != xno) +dnl Braille terminal +AC_ARG_ENABLE(braille, + [ --disable-braille disable braille terminal support]) +AM_CONDITIONAL(BRAILLE_SUPPORT, test "x$enable_braille" != xno) + +dnl VisioBraille terminal +AC_ARG_ENABLE(visiobraille, + [ --disable-visiobraille disable visiobraille terminal support]) +AM_CONDITIONAL(VISIOBRAILLE_SUPPORT, test "x$enable_visiobraille" != xno) + dnl Simulation of the slowness of a serial device. AC_ARG_ENABLE(serial-speed-simulation, [ --enable-serial-speed-simulation diff -urN grub-debian-patched/stage2/Makefile.am grub-0.95+cvs20040624/stage2/Makefile.am --- grub-debian-patched/stage2/Makefile.am 2005-09-05 03:57:03.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/Makefile.am 2005-09-05 03:56:57.000000000 +0200 @@ -7,7 +7,7 @@ fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ - terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h + terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h braille.h visiobraille.h EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) # For . @@ -19,12 +19,13 @@ disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ - terminfo.c tparm.c graphics.c + terminfo.c tparm.c graphics.c braille.c visiobraille.c libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 \ + -DSUPPORT_BRAILLE=1 -DSUPPORT_VISIOBRAILLE=1 \ -fwritable-strings # Stage 2 and Stage 1.5's. @@ -86,8 +87,20 @@ GRAPHICS_FLAGS = endif +if BRAILLE_SUPPORT +BRAILLE_FLAGS = -DSUPPORT_BRAILLE=1 +else +BRAILLE_FLAGS = +endif + +if VISIOBRAILLE_SUPPORT +VISIOBRAILLE_FLAGS = -DSUPPORT_VISIOBRAILLE=1 +else +VISIOBRAILLE_FLAGS = +endif + STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) + $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) $(BRAILLE_FLAGS) $(VISIOBRAILLE_FLAGS) STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 @@ -98,7 +111,7 @@ fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \ - graphics.c + graphics.c braille.c visiobraille.c pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) diff -urN grub-debian-patched/stage2/boot.c grub-0.95+cvs20040624/stage2/boot.c --- grub-debian-patched/stage2/boot.c 2005-09-05 03:57:03.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/boot.c 2005-09-05 03:56:57.000000000 +0200 @@ -25,6 +25,8 @@ #include "imgact_aout.h" #include "i386-elf.h" +#include "braille.h" + static int cur_addr; entry_func entry_addr; static struct mod_list mll[99]; @@ -274,6 +276,7 @@ if (! big_linux && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR) { + braille_write("linux 'zImage' kernel too big, try 'make bzImage'", -1); grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n"); errnum = ERR_WONT_FIT; } diff -urN grub-debian-patched/stage2/braille.c grub-0.95+cvs20040624/stage2/braille.c --- grub-debian-patched/stage2/braille.c 1970-01-01 01:00:00.000000000 +0100 +++ grub-0.95+cvs20040624/stage2/braille.c 2005-09-07 03:11:57.000000000 +0200 @@ -0,0 +1,78 @@ +#include +#ifdef SUPPORT_BRAILLE +#include +#ifdef SUPPORT_VISIOBRAILLE +#include +#endif +static int x = 40, y = 1; +static int inited; + +int braille_init (int unit, int hp) +{ +#ifdef SUPPORT_VISIOBRAILLE + return (inited = vs_init (unit, &x, &y, hp)); +#endif + return 1; +} + +static unsigned char latin1_2_dots_vs[256] = { +0X00, 0X81, 0X83, 0X89, 0X99, 0X91, 0X8B, 0X9B, +0X93, 0X8A, 0X9A, 0X85, 0X87, 0X8D, 0X9D, 0X95, +0X8F, 0X9F, 0X97, 0X8E, 0X9E, 0XA5, 0XA7, 0XBA, +0XAD, 0XBD, 0XB5, 0XFC, 0XA1, 0XA3, 0XA9, 0XB9, +0X00, 0X16, 0X08, 0X28, 0X38, 0X18, 0X1C, 0X04, +0X20, 0X14, 0X0C, 0X30, 0X02, 0X24, 0X32, 0X3F, +0X3C, 0X21, 0X23, 0X29, 0X39, 0X31, 0X2B, 0X3B, +0X33, 0X2A, 0X12, 0X06, 0X26, 0X36, 0X34, 0X22, +0X2F, 0X41, 0X43, 0X49, 0X59, 0X51, 0X4B, 0X5B, +0X53, 0X4A, 0X5A, 0X45, 0X47, 0X4D, 0X5D, 0X55, +0X4F, 0X5F, 0X57, 0X4E, 0X5E, 0X65, 0X67, 0X7A, +0X6D, 0X7D, 0X75, 0X37, 0X2E, 0X3E, 0X2C, 0X84, +0X44, 0X01, 0X03, 0X09, 0X19, 0X11, 0X0B, 0X1B, +0X13, 0X0A, 0X1A, 0X05, 0X07, 0X0D, 0X1D, 0X15, +0X0F, 0X1F, 0X17, 0X0E, 0X1E, 0X25, 0X27, 0X3A, +0X2D, 0X3D, 0X35, 0X60, 0X96, 0X94, 0XD0, 0X00, +0XEF, 0XB3, 0X00, 0XA1, 0X9C, 0XB7, 0X00, 0XAF, +0XA3, 0XAB, 0XAE, 0XBB, 0XA9, 0X00, 0XDC, 0X00, +0XFF, 0X00, 0X00, 0XB9, 0XAA, 0X00, 0XB1, 0XBE, +0XBB, 0XEA, 0XF3, 0X00, 0X00, 0X00, 0X00, 0X00, +0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +0XF7, 0X00, 0XC1, 0X00, 0XD4, 0X00, 0X00, 0XEF, +0X00, 0XFF, 0XE3, 0XEB, 0X00, 0X00, 0XE9, 0XFB, +0X00, 0X00, 0X00, 0X00, 0XF5, 0X00, 0XEA, 0X00, +0X00, 0XFE, 0X00, 0XF1, 0XF3, 0X00, 0X00, 0X00, +0XB7, 0X00, 0XA1, 0X00, 0X9C, 0X00, 0X00, 0XAF, +0XAE, 0XBF, 0XA3, 0XAB, 0X00, 0X00, 0XA9, 0XBB, +0X00, 0X00, 0X00, 0X00, 0XB9, 0X00, 0XAA, 0X00, +0X00, 0XBE, 0X00, 0XB1, 0XB3, 0X00, 0X00, 0X00 +}; +void braille_write (unsigned char *message, int cursor) +{ + int offset; + int i; + int size = strlen(message); + char buf[x]; + if (!inited) + return; + if (cursor >= 0 && cursor <= size) + { + offset = (cursor / x) * x; + message += offset; + size -= offset; + cursor = cursor % x; + } + else + cursor = -1; + if (size > x) + size = x; + for (i=0; i #include +#include + #ifdef SUPPORT_NETBOOT # define GRUB 1 # include @@ -378,6 +380,28 @@ #endif /* SUPPORT_NETBOOT */ +#ifdef SUPPORT_BRAILLE +/* braille */ +static int +braille_func (char *arg, int flags) +{ + int hp = 0; + if (substring ("--hp", arg) <= 0) + hp = 1; + return braille_init(0, hp); +} + +static struct builtin builtin_braille = +{ + "braille", + braille_func, + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, + "braille", + "Initialize a braille device." +}; +#endif /* SUPPORT_BRAILLE */ + + /* cat */ static int cat_func (char *arg, int flags) @@ -3086,6 +3110,7 @@ static int pause_func (char *arg, int flags) { + braille_write(arg, -1); printf("%s\n", arg); /* If ESC is returned, then abort this entry. */ @@ -4372,6 +4397,7 @@ if (term_bitmap & (1 << i)) { current_term = term_table + i; + braille_write("Press any key to continue.", -1); grub_printf ("\rPress any key to continue.\n"); } @@ -4952,6 +4978,9 @@ #ifdef SUPPORT_NETBOOT &builtin_bootp, #endif /* SUPPORT_NETBOOT */ +#ifdef SUPPORT_BRAILLE + &builtin_braille, +#endif /* SUPPORT_BRAILLE */ &builtin_cat, &builtin_chainloader, &builtin_clear, diff -urN grub-debian-patched/stage2/char_io.c grub-0.95+cvs20040624/stage2/char_io.c --- grub-debian-patched/stage2/char_io.c 2005-09-05 03:57:04.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/char_io.c 2005-09-07 03:31:44.000000000 +0200 @@ -29,6 +29,8 @@ # include #endif +#include + #ifndef STAGE1_5 struct term_entry term_table[] = { @@ -361,6 +363,7 @@ void cl_backward (int count) { lpos -= count; + braille_write(buf, lpos); /* If the cursor is in the first section, display the first section instead of the second. */ @@ -388,6 +391,7 @@ void cl_forward (int count) { lpos += count; + braille_write(buf, lpos); /* If the cursor goes outside, scroll the screen to the right. */ if (xpos + count >= CMDLINE_WIDTH) @@ -478,6 +482,7 @@ } /* Print BUF. If ECHO_CHAR is not zero, put it instead. */ + braille_write(buf, lpos); for (i = start; i < start + len && i < llen; i++) { if (! echo_char) @@ -830,6 +835,7 @@ /* Print only the prompt. The contents of CMDLINE is simply discarded, even if it is not empty. */ + braille_write(prompt, -1); grub_printf ("%s", prompt); /* Gather characters until a newline is gotten. */ @@ -845,6 +851,7 @@ /* Printable characters are added into CMDLINE. */ if (c >= ' ' && c <= '~') { + // TODO: put in some editing buffer for braille output. if (! (current_term->flags & TERM_NO_ECHO)) grub_putchar (c); @@ -1076,6 +1083,7 @@ if (current_term->setcolorstate) current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); + braille_write ("[Hit return to continue]", -1); grub_printf ("[Hit return to continue]"); if (current_term->setcolorstate) diff -urN grub-debian-patched/stage2/cmdline.c grub-0.95+cvs20040624/stage2/cmdline.c --- grub-debian-patched/stage2/cmdline.c 2005-09-05 03:57:04.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/cmdline.c 2005-09-05 03:56:57.000000000 +0200 @@ -25,6 +25,8 @@ # include #endif +#include + grub_jmp_buf restart_cmdline_env; /* Find the next word from CMDLINE and return the pointer. If @@ -203,6 +205,7 @@ intervention. */ if (fallback_entry < 0) { + braille_write("Press any key to continue...", -1); grub_printf ("\nPress any key to continue..."); (void) getkey (); } @@ -232,12 +235,15 @@ builtin = find_command (heap); if (! builtin) { + braille_write(old_entry, -1); grub_printf ("%s\n", old_entry); continue; } - if (! (builtin->flags & BUILTIN_NO_ECHO)) + if (! (builtin->flags & BUILTIN_NO_ECHO)) { + braille_write(old_entry, -1); grub_printf ("%s\n", old_entry); + } /* If BUILTIN cannot be run in the command-line, skip it. */ if (! (builtin->flags & BUILTIN_CMDLINE)) diff -urN grub-debian-patched/stage2/serial.c grub-0.95+cvs20040624/stage2/serial.c --- grub-debian-patched/stage2/serial.c 2005-09-05 03:57:04.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/serial.c 2005-09-07 00:11:07.000000000 +0200 @@ -103,6 +103,16 @@ /* There is something wrong. But what can I do? */ return; } + /* Wait until CTS is up. */ + timeout=1000; + while ((inb (serial_hw_port + UART_MSR) & UART_CLEAR_TO_SEND) == 0) + { + if (--timeout == 0) + /* There is something wrong. But what can I do? */ + //return; + /* Send anyway, just in case the device does actually not support RTS/CTS */ + break; + } outb (serial_hw_port + UART_TX, c); } diff -urN grub-debian-patched/stage2/serial.h grub-0.95+cvs20040624/stage2/serial.h --- grub-debian-patched/stage2/serial.h 2005-09-05 03:57:04.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/serial.h 2005-09-04 21:29:49.000000000 +0200 @@ -41,6 +41,9 @@ #define UART_DATA_READY 0x01 #define UART_EMPTY_TRANSMITTER 0x20 +/* For MSR bits. */ +#define UART_CLEAR_TO_SEND 0x10 + /* The type of parity. */ #define UART_NO_PARITY 0x00 #define UART_ODD_PARITY 0x08 diff -urN grub-debian-patched/stage2/stage2.c grub-0.95+cvs20040624/stage2/stage2.c --- grub-debian-patched/stage2/stage2.c 2005-09-05 03:57:04.000000000 +0200 +++ grub-0.95+cvs20040624/stage2/stage2.c 2005-09-06 02:37:14.000000000 +0200 @@ -19,6 +19,7 @@ #include #include +#include grub_jmp_buf restart_env; @@ -107,6 +108,8 @@ gotoxy (2, y); grub_putchar (' '); + if (highlight) + braille_write(entry, -1); for (x = 3; x < 75; x++) { if (*entry && x <= 72) @@ -288,6 +291,7 @@ grub_timeout--; /* Print a message. */ + braille_write("Press `ESC' to enter the menu...", -1); grub_printf ("\rPress `ESC' to enter the menu... %d ", grub_timeout); } @@ -378,8 +382,10 @@ /* Key was pressed, show which entry is selected before GETKEY, since we're comming in here also on GRUB_TIMEOUT == -1 and hang in GETKEY */ - if (current_term->flags & TERM_DUMB) + if (current_term->flags & TERM_DUMB) { + braille_write(get_entry (menu_entries, first_entry + entryno, 0), -1); grub_printf ("\r Highlighted entry is %d: ", entryno); + } c = ASCII_CHAR (getkey ()); @@ -611,6 +617,7 @@ } else { + braille_write("Failed! Press any key to continue...", -1); grub_printf ("Failed!\n Press any key to continue..."); getkey (); goto restart; @@ -727,11 +734,14 @@ while (1) { - if (config_entries) + if (config_entries) { + braille_write(" Booting", -1); printf (" Booting \'%s\'\n\n", get_entry (menu_entries, first_entry + entryno, 0)); - else + } else { + braille_write(" Booting", -1); printf (" Booting command-list\n\n"); + } if (! cur_entry) cur_entry = get_entry (config_entries, first_entry + entryno, 1); diff -urN grub-debian-patched/stage2/visiobraille.c grub-0.95+cvs20040624/stage2/visiobraille.c --- grub-debian-patched/stage2/visiobraille.c 1970-01-01 01:00:00.000000000 +0100 +++ grub-0.95+cvs20040624/stage2/visiobraille.c 2005-09-07 03:15:43.000000000 +0200 @@ -0,0 +1,334 @@ +#ifdef SUPPORT_VISIOBRAILLE +#include +#include +#include +#include +#define WIDTH 40 +#define SOH 1 +#define STX 2 +#define ETX 3 +#define EOT 4 +#define ENQ 5 + + +int vs_init(int unit, int *x, int *y, int hp) { + if (hp) { + if (!(serial_hw_init(serial_hw_get_port(unit), 9600, UART_8BITS_WORD, UART_NO_PARITY, UART_1_STOP_BIT))) { + grub_printf ("groumpf"); + getkey (); + } + } else { + if (!(serial_hw_init(serial_hw_get_port(unit), 57600, UART_8BITS_WORD, UART_ODD_PARITY, UART_1_STOP_BIT))) { + grub_printf ("groumpf"); + getkey (); + } + } + *x = WIDTH; + *y = 1; + return 1; +} +#define BRL_DOT_1 (1<<(1-1)) +#define BRL_DOT_2 (1<<(2-1)) +#define BRL_DOT_3 (1<<(3-1)) +#define BRL_DOT_4 (1<<(4-1)) +#define BRL_DOT_5 (1<<(5-1)) +#define BRL_DOT_6 (1<<(6-1)) +#define BRL_DOT_7 (1<<(7-1)) +#define BRL_DOT_8 (1<<(8-1)) + + static unsigned char outputTable[256] = { + [0] = 0X20, + [BRL_DOT1] = 0X41, + [BRL_DOT1 | BRL_DOT2] = 0X42, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3] = 0X4C, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4] = 0X50, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5] = 0X51, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X2F, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XEF, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X6F, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XAF, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X11, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X91, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XD1, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6] = 0X40, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0X00, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X80, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XC0, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7] = 0X10, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X90, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT8] = 0XD0, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5] = 0X52, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6] = 0X5b, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0X1B, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X9B, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XDB, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7] = 0X12, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X92, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT8] = 0XD2, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT6] = 0X56, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7] = 0X16, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X96, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT8] = 0XD6, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT7] = 0X0C, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT7 | BRL_DOT8] = 0X8C, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT3 | BRL_DOT8] = 0XCC, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4] = 0X46, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5] = 0X47, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X37, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XF7, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X77, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XB7, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X07, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X87, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XC7, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT6] = 0X36, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0XF6, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X76, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XB6, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT7] = 0X06, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X86, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT4 | BRL_DOT8] = 0XC6, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5] = 0X48, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT6] = 0X38, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XF8, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X78, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XB8, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT7] = 0X08, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X88, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT5 | BRL_DOT8] = 0XC8, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT6] = 0X32, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT6 | BRL_DOT7] = 0XF2, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X72, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT6 | BRL_DOT8] = 0XB2, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT7] = 0X02, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT7 | BRL_DOT8] = 0X82, + [BRL_DOT1 | BRL_DOT2 | BRL_DOT8] = 0XC2, + [BRL_DOT1 | BRL_DOT3] = 0X4B, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4] = 0X4D, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5] = 0X4E, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X59, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0X19, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X99, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XD9, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X0E, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X8E, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XCE, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6] = 0X58, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0X18, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X98, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XD8, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7] = 0X0D, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X8D, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT4 | BRL_DOT8] = 0XCD, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5] = 0X4F, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6] = 0X5A, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0X1A, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X9A, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XDA, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7] = 0X0F, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X8F, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT5 | BRL_DOT8] = 0XCF, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT6] = 0X55, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7] = 0X15, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X95, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT6 | BRL_DOT8] = 0XD5, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT7] = 0X0B, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT7 | BRL_DOT8] = 0X8B, + [BRL_DOT1 | BRL_DOT3 | BRL_DOT8] = 0XCB, + [BRL_DOT1 | BRL_DOT4] = 0X43, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5] = 0X44, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X34, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XF4, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X74, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XB4, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X04, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X84, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XC4, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT6] = 0X33, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0XF3, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X73, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XB3, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT7] = 0X03, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X83, + [BRL_DOT1 | BRL_DOT4 | BRL_DOT8] = 0XC3, + [BRL_DOT1 | BRL_DOT5] = 0X45, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT6] = 0X35, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XF5, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X75, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XB5, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT7] = 0X05, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X85, + [BRL_DOT1 | BRL_DOT5 | BRL_DOT8] = 0XC5, + [BRL_DOT1 | BRL_DOT6] = 0X31, + [BRL_DOT1 | BRL_DOT6 | BRL_DOT7] = 0XF1, + [BRL_DOT1 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X71, + [BRL_DOT1 | BRL_DOT6 | BRL_DOT8] = 0XB1, + [BRL_DOT1 | BRL_DOT7] = 0X01, + [BRL_DOT1 | BRL_DOT7 | BRL_DOT8] = 0X81, + [BRL_DOT1 | BRL_DOT8] = 0XC1, + [BRL_DOT2] = 0X2C, + [BRL_DOT2 | BRL_DOT3] = 0X3B, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4] = 0X53, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5] = 0X54, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X5D, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0X1D, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X9D, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XDD, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X14, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X94, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XD4, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6] = 0X5C, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0X1C, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X9C, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XDC, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7] = 0X13, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X93, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT4 | BRL_DOT8] = 0XD3, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5] = 0X21, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6] = 0X3D, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0Xfd, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X7D, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XBD, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7] = 0XE1, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X61, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT5 | BRL_DOT8] = 0XA1, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT6] = 0X3C, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7] = 0XFC, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X7C, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT6 | BRL_DOT8] = 0XBC, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT7] = 0XFB, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT7 | BRL_DOT8] = 0X7B, + [BRL_DOT2 | BRL_DOT3 | BRL_DOT8] = 0XBB, + [BRL_DOT2 | BRL_DOT4] = 0X49, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5] = 0X4A, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X57, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0X17, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X97, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XD7, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0X0A, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X8A, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XCA, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT6] = 0X39, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0XF9, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X79, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XB9, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT7] = 0X09, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X89, + [BRL_DOT2 | BRL_DOT4 | BRL_DOT8] = 0XC9, + [BRL_DOT2 | BRL_DOT5] = 0X3A, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT6] = 0X2E, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XEE, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X6E, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XAE, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT7] = 0XFA, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X7A, + [BRL_DOT2 | BRL_DOT5 | BRL_DOT8] = 0XBA, + [BRL_DOT2 | BRL_DOT6] = 0X3F, + [BRL_DOT2 | BRL_DOT6 | BRL_DOT7] = 0XFF, + [BRL_DOT2 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X7F, + [BRL_DOT2 | BRL_DOT6 | BRL_DOT8] = 0XBF, + [BRL_DOT2 | BRL_DOT7] = 0XEC, + [BRL_DOT2 | BRL_DOT7 | BRL_DOT8] = 0X6C, + [BRL_DOT2 | BRL_DOT8] = 0XAC, + [BRL_DOT3] = 0X27, + [BRL_DOT3 | BRL_DOT4] = 0X2A, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5] = 0X26, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X30, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XF0, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X70, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XB0, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0XE6, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X66, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XA6, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT6] = 0X5E, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0X1E, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X9E, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XDE, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT7] = 0XEA, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X6A, + [BRL_DOT3 | BRL_DOT4 | BRL_DOT8] = 0XAA, + [BRL_DOT3 | BRL_DOT5] = 0X29, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT6] = 0X3E, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XFE, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X7E, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XBE, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT7] = 0XE9, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X69, + [BRL_DOT3 | BRL_DOT5 | BRL_DOT8] = 0XA9, + [BRL_DOT3 | BRL_DOT6] = 0X2D, + [BRL_DOT3 | BRL_DOT6 | BRL_DOT7] = 0XED, + [BRL_DOT3 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X6D, + [BRL_DOT3 | BRL_DOT6 | BRL_DOT8] = 0XAD, + [BRL_DOT3 | BRL_DOT7] = 0XE7, + [BRL_DOT3 | BRL_DOT7 | BRL_DOT8] = 0X67, + [BRL_DOT3 | BRL_DOT8] = 0XA7, + [BRL_DOT4] = 0X22, + [BRL_DOT4 | BRL_DOT5] = 0X25, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT6] = 0X24, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XE4, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X64, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XA4, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT7] = 0XE5, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X65, + [BRL_DOT4 | BRL_DOT5 | BRL_DOT8] = 0XA5, + [BRL_DOT4 | BRL_DOT6] = 0X23, + [BRL_DOT4 | BRL_DOT6 | BRL_DOT7] = 0XE3, + [BRL_DOT4 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X63, + [BRL_DOT4 | BRL_DOT6 | BRL_DOT8] = 0XA3, + [BRL_DOT4 | BRL_DOT7] = 0XE2, + [BRL_DOT4 | BRL_DOT7 | BRL_DOT8] = 0X62, + [BRL_DOT4 | BRL_DOT8] = 0XA2, + [BRL_DOT5] = 0X5F, + [BRL_DOT5 | BRL_DOT6] = 0X2B, + [BRL_DOT5 | BRL_DOT6 | BRL_DOT7] = 0XEB, + [BRL_DOT5 | BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X6B, + [BRL_DOT5 | BRL_DOT6 | BRL_DOT8] = 0XAB, + [BRL_DOT5 | BRL_DOT7] = 0X1F, + [BRL_DOT5 | BRL_DOT7 | BRL_DOT8] = 0X9F, + [BRL_DOT5 | BRL_DOT8] = 0XDF, + [BRL_DOT6] = 0X28, + [BRL_DOT6 | BRL_DOT7] = 0XE8, + [BRL_DOT6 | BRL_DOT7 | BRL_DOT8] = 0X68, + [BRL_DOT6 | BRL_DOT8] = 0XA8, + [BRL_DOT7] = 0XE0, + [BRL_DOT7 | BRL_DOT8] = 0X60, + [BRL_DOT8] = 0XA0 + }; +static void serialWrite(unsigned char *buf, int num) { + int i; + for (i=0;i' }; + int i; + unsigned char *s, c; + int tries=3; + int timeout; + int res; + for (i=0, s = outbuf+1+1; i