
Basic operations for all schemes splitting 3 bytes into 4
(3 * 8 == 4 * 6, 6 bit -> 64 values, can be made all printable)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

encode / split

	out [0] = (077 &  (in [0] >> 2));
	out [1] = (077 & ((in [0] << 4) & 060 | (in [1] >> 4) & 017));
	out [2] = (077 & ((in [1] << 2) & 074 | (in [2] >> 6) &  03));
	out [3] = (077 &  (in [2] & 077));

	constants:
		oct	dez	hex	bin
		077	63	0x3f	00111111
		074	60	0x3c	00111100
		060	48	0x30	00110000
		017	15	0x0f	00001111
		003	03	0x03	00000011

	in [0]	in [1]	in [2]
	_______|_______|_______|
	012345670123456701234567
      00......			out [0]
	    00......		out [1]
	          00......	out [2]
	                00......out [3]
	_______|_______|_______|


map 6 bit -> characters:

uuencode = "`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
base64   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";


decode / merge

	in [0]	in [1]	in [2]	in [3]
	00......00......00......00......
	_______|_______|_______|_______|
out [0]	  ......  ..
out [1]             ....  ....
out [2]			      ..  ......
	_______|_______|_______|_______|

	00 bits NOT relevant and cut out.

#define	MASK (i,by,mask) ((in [i] by) & mask)

	constants:
		oct	dez	hex	bin
		374	??	0xfa	11111100
		360	??	0xf0	11110000
		300     ??	0xa0	11000000
		003	??	0x03	00000011
		017	15	0x0f	00001111
		077	63	0x3f	00111111

	out [0] = MASK (0, << 2, 0374) | MASK (1, >> 4, 003);
	out [1] = MASK (1, << 4, 0360) | MASK (2, >> 2, 017);
	out [2] = MASK (2, << 6, 0300) | MASK (3,     , 077);


------------------------------
examples:

01234567890	hex			bin
hello world	68656c6c6f20776f726c64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hel		68656c			011010 000110 010101 101100
   lo 		      6c6f20		011011 000110 111100 100000
      wor	            776f72	011101 110110 111101 110010
         ld	                  6c64	011011 000110 0100         
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:&5L;&\@=V]R;&0~	/uuencode
aGVsbG8gd29ybGQ=	/base64

bin				dez		uu	base64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
011010 000110 010101 101100	26 06 21 44	:&5L	aGVs
011011 000110 111100 100000	27 06 60 32	;&\@	bG8g
011101 110110 111101 110010	29 54 61 50	=V]R	d29y
011011 000110 0100		27 06 16 xx	;&0~	bGQ=
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		     1         2         3         4         5         6
	   0123456789012345678901234567890123456789012345678901234567890123
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uuencode = `!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
base64   = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
