Add to 11U68 11E68

Dependencies:   DirectoryList MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

Revision:
22:bd98a782fba6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uu_coding.cpp	Fri Sep 13 03:34:43 2013 +0000
@@ -0,0 +1,71 @@
+char    uu_table[ 0x60 + 1 ];
+
+
+void initialize_uue_table( void )
+{
+    int     i;
+
+    uu_table[ 0 ] = 0x60;           // 0x20 is translated to 0x60 !
+
+    for ( i = 1; i < 64; i++ ) {
+        uu_table[ i ] = (char)(' ' + i);
+    }
+}
+
+
+void initialize_uud_table( void )
+{
+    int     i;
+
+    uu_table[ 0x60 ] = 0;
+
+    for ( i = 0x21; i < 0x60; i++ ) {
+        uu_table[ i ] = i - 0x20;
+    }
+}
+
+
+int uudecode_a_line( char *b, char *s )
+{
+
+    unsigned long   v;
+    int             read_size;
+
+    read_size   = (*s++) - ' ';
+
+    for ( int i = 0; i < read_size; i += 3 ) {
+        v        = uu_table[ *s++ ] << 18;
+        v       |= uu_table[ *s++ ] << 12;
+        v       |= uu_table[ *s++ ] <<  6;
+        v       |= uu_table[ *s++ ] <<  0;
+
+        *b++     = (v >> 16) & 0xFF;
+        *b++     = (v >>  8) & 0xFF;
+        *b++     = (v >>  0) & 0xFF;
+    }
+
+    return ( read_size );
+}
+
+
+long bin2uue( char *bin, char *str, int size )
+{
+    unsigned long   v;
+    long            checksum    = 0;
+    int             strpos      = 0;
+
+    *(str + strpos++) = ' ' + size;
+
+    for ( int i = 0; i < size; i += 3 ) {
+        checksum    += *(bin + i + 0) + *(bin + i + 1) + *(bin + i + 2);
+        v   = (*(bin + i + 0) << 16) | (*(bin + i + 1) << 8) | (*(bin + i + 2) << 0);
+        *(str + strpos++) = uu_table[ (v >> 18) & 0x3F ];
+        *(str + strpos++) = uu_table[ (v >> 12) & 0x3F ];
+        *(str + strpos++) = uu_table[ (v >>  6) & 0x3F ];
+        *(str + strpos++) = uu_table[ (v >>  0) & 0x3F ];
+    }
+    *(str + strpos++) = '\n';
+    *(str + strpos++) = '\0';
+
+    return checksum;
+}