#include <...> should provide typedef unsigned char U16; typedef unsigned short U16; typedef unsigned int U32; typedef unsigned long long U64; typedef signed char I8; typedef signed short I16; typedef signed int I32; typedef signed long long I64; // yeah, not very elegant static U8 *data; static U16 dlen; static U8 dec_U8 (void) { assert (dlen > 0); dlen--; return *data++; } static U16 dec_U16 (void) { U16 l = dec_U8 (); U16 h = dec_U8 (); return l | (h << 8); } static U32 dec_U32 (void) { U32 l = dec_U16 (); U32 h = dec_U16 (); return l | (h << 16); } static U64 dec_U64 (void) { U64 l = dec_U32 (); U64 h = dec_U32 (); return l | (h << 32); } #define dec_I8() ((I8)dec_U8 ()) #define dec_I16() ((I16)dec_U16 ()) #define dec_I32() ((I32)dec_U32 ()) #define dec_I64() ((I64)dec_U64 ()) // dec_DATA // dec_STRING n // dec_CONSTANT #define dec_password() dec_U64() static void enc_U8 (U8 d) { assert (dlen > 0); dlen--; *data++ = d; } #define enc_U16(d) enc_U8 (d); enc_U16 ((d) >> 8) #define enc_U32(d) enc_U16 (d); enc_U16 ((d) >> 16) #define enc_U64(d) enc_U32 (d); enc_U32 ((d) >> 32) #define enc_I8(d) enc_U8 ((U8 )d) #define enc_I16(d) enc_U16 ((U16)d) #define enc_I32(d) enc_U32 ((U32)d) #define enc_I64(d) enc_U64 ((U64)d) // enc_DATA // enc_STRING ,n // enc_CONSTANT // enc_password // # $hash must be 64 bit // my $hash = new Math::BigInt; // $hash = $hash * 1055 + ord for split //, $_[0]; // enc_U64 $hash; ]]> ############################################################################# # types ############################################################################# # structures ############################################################################# # "less" primitive types ############################################################################# # messages } 1; static U16 * dec_ () { return dec_STRING (); } static void enc_ (const U16 *s) { enc_STRING (s, ); } static char * dec_ () { return dec_ASCIZ (); } static void enc_ (const char *s) { enc_ASCIZ (s, ); } static float dec_ () { (1. / ) * dec_ (); } static void enc_ (float f) { enc_ (f * ); } ; while (dlen) r.->append (dec_ ()); if (r. ) r. = dec_ (); enc_ (r.); struct KGS_ { }; static const struct KGS_ & dec_ () { struct KGS_ r; return r; } static void enc_ (const struct KGS_ &r) { } struct KGS__ { }; static struct KGS__ & dec__ () { struct KGS__ r; r.type = MSG_; } static void enc__ (const struct KGS__ &r) { enc_U16 (0x); }