REM Demo implementing BASE64 encoder REM http://en.wikipedia.org/wiki/Base64 REM REM Taken from the base64 encoder example of BaCon. REM PvE, August 2014 - GPL. INTEGER byte1, byte2, byte3 INTEGER base1, base2, base3, base4 STRING dat, enc IF argc != 2 THEN PRINT "Usage: b64enc " NL END ENDIF REM Get the string to convert LET dat = argv[1] REM the Base64 constant CONST BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" WHILE LEN(dat) > 0 DO REM Find ASCII values IF LEN(dat) == 1 THEN LET byte1 = ASC(MID(dat, 1, 1)) LET byte2 = 0 LET byte3 = 0 ELIF LEN(dat) == 2 THEN LET byte1 = ASC(MID(dat, 1, 1)) LET byte2 = ASC(MID(dat, 2, 1)) LET byte3 = 0 ELSE LET byte1 = ASC(MID(dat, 1, 1)) LET byte2 = ASC(MID(dat, 2, 1)) LET byte3 = ASC(MID(dat, 3, 1)) ENDIF REM Create Base64 values LET base1 = byte1 / 4 LET base2 = (byte1 & 3) * 16 + (byte2 & 240) / 16 LET base3 = (byte2 & 15) * 4 + (byte3 & 192) / 64 LET base4 = byte3 & 63 REM Find Base64 characters IF LEN(dat) == 1 THEN SET enc = CONCAT(enc, MID(BASE64, base1 + 1, 1), MID(BASE64, base2 + 1, 1), "==") SET dat = "" ELIF LEN(dat) == 2 THEN SET enc = CONCAT(enc, MID(BASE64, base1 + 1, 1), MID(BASE64, base2 + 1, 1), MID(BASE64, base3 + 1, 1), "=") SET dat = "" ELSE SET enc = CONCAT(enc, MID(BASE64, base1 + 1, 1), MID(BASE64, base2 + 1, 1), MID(BASE64, base3 + 1, 1), MID(BASE64, base4 + 1, 1)) SET dat = RIGHT(dat, LEN(dat) - 3) ENDIF WEND PRINT enc NL