mnemonicode-0.73/mnemonic.h
author Olivier Scherler <oscherler@femto-byte.com>
Tue May 12 14:38:30 2009 +0200 (2009-05-12)
changeset 30 2befbe36c746
permissions -rw-r--r--
Changed -[MYDirectoryEvent relativePath] to work on standardised paths, in case symlinks are used. Fixes issue #28 in Murky.
jens@0
     1
/* mnemonic.h 
jens@0
     2
jens@0
     3
 Copyright (c) 2000  Oren Tirosh <oren@hishome.net>
jens@0
     4
jens@0
     5
 Permission is hereby granted, free of charge, to any person obtaining a copy
jens@0
     6
 of this software and associated documentation files (the "Software"), to deal
jens@0
     7
 in the Software without restriction, including without limitation the rights
jens@0
     8
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
jens@0
     9
 copies of the Software, and to permit persons to whom the Software is
jens@0
    10
 furnished to do so, subject to the following conditions:
jens@0
    11
jens@0
    12
 The above copyright notice and this permission notice shall be included in
jens@0
    13
 all copies or substantial portions of the Software.
jens@0
    14
jens@0
    15
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jens@0
    16
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jens@0
    17
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
jens@0
    18
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jens@0
    19
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jens@0
    20
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
jens@0
    21
 THE SOFTWARE.
jens@0
    22
jens@0
    23
*/
jens@0
    24
jens@0
    25
#define MN_BASE		1626		/* cubic root of 2^32, rounded up */
jens@0
    26
#define MN_REMAINDER	7		/* extra words for 24 bit remainders */
jens@0
    27
#define MN_WORDS (MN_BASE+MN_REMAINDER)	/* total number of words */
jens@0
    28
#define MN_WORD_BUFLEN	25		/* size for a word buffer+headroom */
jens@0
    29
jens@0
    30
#define MN_EOF		0		/* signal end to mn_decode_word_index */
jens@0
    31
jens@0
    32
/* result codes */
jens@0
    33
#define MN_OK		0		/* decoding ok */
jens@0
    34
#define MN_EREM		-1		/* unexpected arithmetic remainder */
jens@0
    35
#define MN_EOVERRUN	-2		/* output buffer overrun */
jens@0
    36
#define MN_EOVERRUN24	-3		/* data after 24 bit remainder */
jens@0
    37
#define MN_EINDEX	-4		/* bad word index */
jens@0
    38
#define MN_EINDEX24	-5		/* unexpected 24 bit remainder word */
jens@0
    39
#define MN_EENCODING	-6		/* invalid arithmetic encoding */
jens@0
    40
#define MN_EWORD	-7		/* unrecognized word */
jens@0
    41
#define MN_EFORMAT	-8		/* bad format string */
jens@0
    42
jens@0
    43
/* Sample formats for mn_encode */
jens@0
    44
#define MN_FDEFAULT 		"x-x-x--"
jens@0
    45
#define MN_F64BITSPERLINE	" x-x-x--x-x-x\n"
jens@0
    46
#define MN_F96BITSPERLINE	" x-x-x--x-x-x--x-x-x\n"
jens@0
    47
#define MN_F128BITSPERLINE	" x-x-x--x-x-x--x-x-x--x-x-x\n"
jens@0
    48
/* Note that the last format does not fit in a standard 80 character line */
jens@0
    49
jens@0
    50
typedef unsigned char mn_byte;		/* 8 bit quantity */
jens@0
    51
typedef unsigned long mn_word32;	/* temporary value, at least 32 bits */
jens@0
    52
typedef unsigned int mn_index;		/* index into wordlist */
jens@0
    53
jens@0
    54
extern const char *mn_words[];		/* the word list itself */
jens@0
    55
extern const char *mn_wordlist_version;	/* version notice string */
jens@0
    56
jens@0
    57
int 		mn_decode (char *src, void *dest, int destsize);
jens@0
    58
int 		mn_encode (void *src , int srcsize, 
jens@0
    59
			   char *dest, int destsize, char *format);
jens@0
    60
jens@0
    61
int 		mn_words_required (int size);
jens@0
    62
mn_index 	mn_encode_word_index (void *src, int srcsize, int n);
jens@0
    63
const char*	mn_encode_word (void *src, int srcsize, int n);
jens@0
    64
mn_index 	mn_next_word_index (char **ptr);
jens@0
    65
int 		mn_decode_word_index (mn_index index, void *dest, 
jens@0
    66
				     int destsize, int *offset);
jens@0
    67
jens@0
    68