X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fsu_codec.c;fp=util%2Fsu_codec.c;h=745d9386629a4892759ca054834f68f25641fb9c;hb=ca39c711e9398043092cceeb3b4a7d8a0db1c0d8;hp=0000000000000000000000000000000000000000;hpb=a1b0fc99b8a098eff3d56172af6dd249a28399b3;p=idzebra-moved-to-github.git diff --git a/util/su_codec.c b/util/su_codec.c new file mode 100644 index 0000000..745d938 --- /dev/null +++ b/util/su_codec.c @@ -0,0 +1,77 @@ +/* $Id: su_codec.c,v 1.1 2006-11-21 14:32:38 adam Exp $ + Copyright (C) 1995-2006 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include +#include + +#include +#include + +int key_SU_encode (int ch, char *out) +{ + int i; + for (i = 0; ch; i++) + { + if (ch >= 64) + out[i] = 65 + (ch & 63); + else + out[i] = 1 + ch; + ch = ch >> 6; + } + return i; + /* in out + 0 1 + 1 2 + 63 64 + 64 65, 2 + 65 66, 2 + 127 128, 2 + 128 65, 3 + 191 128, 3 + 192 65, 4 + */ +} + +int key_SU_decode (int *ch, const unsigned char *out) +{ + int len = 1; + int fact = 1; + *ch = 0; + for (len = 1; *out >= 65; len++, out++) + { + *ch += (*out - 65) * fact; + fact <<= 6; + } + *ch += (*out - 1) * fact; + return len; +} + +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +