Add to 11U68 11E68
Dependencies: DirectoryList MODSERIAL mbed
Fork of ika_shouyu_poppoyaki by
uu_coding.cpp@37:4cd12c9c1cc2, 2013-09-26 (annotated)
- Committer:
- okano
- Date:
- Thu Sep 26 12:58:51 2013 +0000
- Revision:
- 37:4cd12c9c1cc2
- Parent:
- 22:bd98a782fba6
correcting version number in message
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 22:bd98a782fba6 | 1 | char uu_table[ 0x60 + 1 ]; |
okano | 22:bd98a782fba6 | 2 | |
okano | 22:bd98a782fba6 | 3 | |
okano | 22:bd98a782fba6 | 4 | void initialize_uue_table( void ) |
okano | 22:bd98a782fba6 | 5 | { |
okano | 22:bd98a782fba6 | 6 | int i; |
okano | 22:bd98a782fba6 | 7 | |
okano | 22:bd98a782fba6 | 8 | uu_table[ 0 ] = 0x60; // 0x20 is translated to 0x60 ! |
okano | 22:bd98a782fba6 | 9 | |
okano | 22:bd98a782fba6 | 10 | for ( i = 1; i < 64; i++ ) { |
okano | 22:bd98a782fba6 | 11 | uu_table[ i ] = (char)(' ' + i); |
okano | 22:bd98a782fba6 | 12 | } |
okano | 22:bd98a782fba6 | 13 | } |
okano | 22:bd98a782fba6 | 14 | |
okano | 22:bd98a782fba6 | 15 | |
okano | 22:bd98a782fba6 | 16 | void initialize_uud_table( void ) |
okano | 22:bd98a782fba6 | 17 | { |
okano | 22:bd98a782fba6 | 18 | int i; |
okano | 22:bd98a782fba6 | 19 | |
okano | 22:bd98a782fba6 | 20 | uu_table[ 0x60 ] = 0; |
okano | 22:bd98a782fba6 | 21 | |
okano | 22:bd98a782fba6 | 22 | for ( i = 0x21; i < 0x60; i++ ) { |
okano | 22:bd98a782fba6 | 23 | uu_table[ i ] = i - 0x20; |
okano | 22:bd98a782fba6 | 24 | } |
okano | 22:bd98a782fba6 | 25 | } |
okano | 22:bd98a782fba6 | 26 | |
okano | 22:bd98a782fba6 | 27 | |
okano | 22:bd98a782fba6 | 28 | int uudecode_a_line( char *b, char *s ) |
okano | 22:bd98a782fba6 | 29 | { |
okano | 22:bd98a782fba6 | 30 | |
okano | 22:bd98a782fba6 | 31 | unsigned long v; |
okano | 22:bd98a782fba6 | 32 | int read_size; |
okano | 22:bd98a782fba6 | 33 | |
okano | 22:bd98a782fba6 | 34 | read_size = (*s++) - ' '; |
okano | 22:bd98a782fba6 | 35 | |
okano | 22:bd98a782fba6 | 36 | for ( int i = 0; i < read_size; i += 3 ) { |
okano | 22:bd98a782fba6 | 37 | v = uu_table[ *s++ ] << 18; |
okano | 22:bd98a782fba6 | 38 | v |= uu_table[ *s++ ] << 12; |
okano | 22:bd98a782fba6 | 39 | v |= uu_table[ *s++ ] << 6; |
okano | 22:bd98a782fba6 | 40 | v |= uu_table[ *s++ ] << 0; |
okano | 22:bd98a782fba6 | 41 | |
okano | 22:bd98a782fba6 | 42 | *b++ = (v >> 16) & 0xFF; |
okano | 22:bd98a782fba6 | 43 | *b++ = (v >> 8) & 0xFF; |
okano | 22:bd98a782fba6 | 44 | *b++ = (v >> 0) & 0xFF; |
okano | 22:bd98a782fba6 | 45 | } |
okano | 22:bd98a782fba6 | 46 | |
okano | 22:bd98a782fba6 | 47 | return ( read_size ); |
okano | 22:bd98a782fba6 | 48 | } |
okano | 22:bd98a782fba6 | 49 | |
okano | 22:bd98a782fba6 | 50 | |
okano | 22:bd98a782fba6 | 51 | long bin2uue( char *bin, char *str, int size ) |
okano | 22:bd98a782fba6 | 52 | { |
okano | 22:bd98a782fba6 | 53 | unsigned long v; |
okano | 22:bd98a782fba6 | 54 | long checksum = 0; |
okano | 22:bd98a782fba6 | 55 | int strpos = 0; |
okano | 22:bd98a782fba6 | 56 | |
okano | 22:bd98a782fba6 | 57 | *(str + strpos++) = ' ' + size; |
okano | 22:bd98a782fba6 | 58 | |
okano | 22:bd98a782fba6 | 59 | for ( int i = 0; i < size; i += 3 ) { |
okano | 22:bd98a782fba6 | 60 | checksum += *(bin + i + 0) + *(bin + i + 1) + *(bin + i + 2); |
okano | 22:bd98a782fba6 | 61 | v = (*(bin + i + 0) << 16) | (*(bin + i + 1) << 8) | (*(bin + i + 2) << 0); |
okano | 22:bd98a782fba6 | 62 | *(str + strpos++) = uu_table[ (v >> 18) & 0x3F ]; |
okano | 22:bd98a782fba6 | 63 | *(str + strpos++) = uu_table[ (v >> 12) & 0x3F ]; |
okano | 22:bd98a782fba6 | 64 | *(str + strpos++) = uu_table[ (v >> 6) & 0x3F ]; |
okano | 22:bd98a782fba6 | 65 | *(str + strpos++) = uu_table[ (v >> 0) & 0x3F ]; |
okano | 22:bd98a782fba6 | 66 | } |
okano | 22:bd98a782fba6 | 67 | *(str + strpos++) = '\n'; |
okano | 22:bd98a782fba6 | 68 | *(str + strpos++) = '\0'; |
okano | 22:bd98a782fba6 | 69 | |
okano | 22:bd98a782fba6 | 70 | return checksum; |
okano | 22:bd98a782fba6 | 71 | } |