X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=common.c;h=11a350bfc2dba30daa9d4614657f0e9d873e7fb4;hb=1fbbb2731b1813bddf513961955a74de56abde83;hp=9615b5a76997f36ed419142af73ef0e9d28095be;hpb=1c1d251ba80d985f8b7f641f3e9baa0584eb2a86;p=xonotic%2Fdarkplaces.git diff --git a/common.c b/common.c index 9615b5a7..11a350bf 100644 --- a/common.c +++ b/common.c @@ -1514,6 +1514,9 @@ static const gamemode_info_t gamemode_info [GAME_COUNT] = // GAME_STRAPBOMB // COMMANDLINEOPTION: Game: -strapbomb runs the game Strap-on-bomb Car { "strapbomb", "-strapbomb", "Strap-on-bomb Car", "id1", NULL, "strap", "strapbomb" }, +// GAME_MOONHELM +// COMMANDLINEOPTION: Game: -moonhelm runs the game MoonHelm +{ "moonhelm", "-moonhelm", "MoonHelm", "data", NULL, "mh", "moonhelm" }, }; void COM_InitGameType (void) @@ -2257,3 +2260,34 @@ char **XPM_DecodeString(const char *in) return tokens; } + +static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static void base64_3to4(const unsigned char *in, unsigned char *out, int bytes) +{ + unsigned char i0 = (bytes > 0) ? in[0] : 0; + unsigned char i1 = (bytes > 1) ? in[1] : 0; + unsigned char i2 = (bytes > 2) ? in[2] : 0; + unsigned char o0 = base64[i0 >> 2]; + unsigned char o1 = base64[((i0 << 4) | (i1 >> 4)) & 077]; + unsigned char o2 = base64[((i1 << 2) | (i2 >> 6)) & 077]; + unsigned char o3 = base64[i2 & 077]; + out[0] = (bytes > 0) ? o0 : '?'; + out[1] = (bytes > 0) ? o1 : '?'; + out[2] = (bytes > 1) ? o2 : '='; + out[3] = (bytes > 2) ? o3 : '='; +} + +size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen) +{ + size_t blocks, i; + // expand the out-buffer + blocks = (buflen + 2) / 3; + if(blocks*4 > outbuflen) + return 0; + for(i = blocks; i > 0; ) + { + --i; + base64_3to4(buf + 3*i, buf + 4*i, buflen - 3*i); + } + return blocks * 4; +}