diff options
Diffstat (limited to 'mixlib')
-rw-r--r-- | mixlib/mix_types.h | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/mixlib/mix_types.h b/mixlib/mix_types.h index 918046e..e10f8c7 100644 --- a/mixlib/mix_types.h +++ b/mixlib/mix_types.h @@ -2,22 +2,22 @@ * This file contains declarations for the basic types used in MIX: * mix_byte_t, mix_char_t, mix_short_t and mix_word_t. * ------------------------------------------------------------------ - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * + * Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc. + * * This program 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 of the License, or * (at your option) any later version. - * + * * This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * + * */ @@ -66,7 +66,7 @@ typedef guint8 mix_char_t; /* Conversions for mix_char_t's */ #define mix_char_to_byte(mchar) mix_byte_new(mchar) -#define mix_byte_to_char(byte) ((mix_char_t)(byte&MIX_CHAR_MAX)) +#define mix_byte_to_char(byte) ((mix_char_t)((byte) & MIX_CHAR_MAX)) extern mix_char_t mix_ascii_to_char(guchar c); @@ -78,7 +78,7 @@ mix_char_to_ascii(mix_char_t c); /*----------------- mix_word_t --------------------------------------------*/ /* * Represented as a gint32 (glib ensures that this type has 32 - * bits). Bit 30 is the sign, higher bits are 0, + * bits). Bit 30 is the sign, higher bits are 0, * and bits 0-29 are the magnitude. * Each MIX 'byte' is a 6-bit substring of the magnitude. */ @@ -99,7 +99,7 @@ typedef guint32 mix_word_t; ( (x) < 0 \ ? ( MIX_WORD_SIGN_BIT | ((mix_word_t)(-(x)) & MIX_WORD_MAX) ) \ : ( (mix_word_t)(x) & MIX_WORD_MAX ) \ -) +) /* Create a mix_word_t from individual bytes */ #define mix_word_new_b(b1,b2,b3,b4,b5) \ @@ -117,11 +117,11 @@ mix_bytes_to_word(mix_byte_t *bytes, guint byteno); /* Access byte within a word */ extern mix_byte_t /* byte -idx- or MIX_BYTE_ZERO if -idx- out of range */ -mix_word_get_byte(mix_word_t word, /* word parsed */ +mix_word_get_byte(mix_word_t word, /* word parsed */ guint idx /* byte: 1 to 5 */); /* Set a byte within a mix_word_t */ -extern void +extern void mix_word_set_byte(mix_word_t *into, /* word to be modified */ guint idx, /* byte: 1 to 5 */ mix_byte_t value /* byte's value */); @@ -138,9 +138,9 @@ mix_word_set_byte(mix_word_t *into, /* word to be modified */ /* Arithmetic operations */ -extern mix_word_t +extern mix_word_t mix_word_add(mix_word_t x, mix_word_t y); - + #define mix_word_sub(x,y) ( mix_word_add((x),mix_word_negative(y)) ) /* Add two words filling a high word if needed. @@ -153,27 +153,27 @@ mix_word_add_and_carry(mix_word_t x, mix_word_t y, /* Product, stored in -high_word- and -low_word-, which can be NULL. */ -extern void -mix_word_mul(mix_word_t x, mix_word_t y, +extern void +mix_word_mul(mix_word_t x, mix_word_t y, mix_word_t *high_word, mix_word_t *low_word); /* Division. -quotient- and/or -remainder- can be NULL. */ -extern gboolean /* TRUE if overflow */ -mix_word_div(mix_word_t n1, mix_word_t n0, mix_word_t d, +extern gboolean /* TRUE if overflow */ +mix_word_div(mix_word_t n1, mix_word_t n0, mix_word_t d, mix_word_t *quotient, mix_word_t *remainder); /* Shift operations */ -extern void -mix_word_shift_left(mix_word_t A, mix_word_t X, gulong count, +extern void +mix_word_shift_left(mix_word_t A, mix_word_t X, gulong count, mix_word_t *pA, mix_word_t *pX); -extern void -mix_word_shift_right(mix_word_t A, mix_word_t X, gulong count, +extern void +mix_word_shift_right(mix_word_t A, mix_word_t X, gulong count, mix_word_t *pA, mix_word_t *pX); -extern void -mix_word_shift_left_circular(mix_word_t A, mix_word_t X, gulong count, +extern void +mix_word_shift_left_circular(mix_word_t A, mix_word_t X, gulong count, mix_word_t *pA, mix_word_t *pX); -extern void -mix_word_shift_right_circular(mix_word_t A, mix_word_t X, gulong count, +extern void +mix_word_shift_right_circular(mix_word_t A, mix_word_t X, gulong count, mix_word_t *pA, mix_word_t *pX); @@ -196,7 +196,7 @@ mix_fspec_is_valid(mix_fspec_t f); extern mix_word_t /* the specified field or 0 if f is not valid */ mix_word_get_field(mix_fspec_t f, mix_word_t word); -extern mix_word_t /* -to- with the field -f- from -from- or -to- +extern mix_word_t /* -to- with the field -f- from -from- or -to- if -f- is not a valid fspec */ mix_word_set_field(mix_fspec_t f, mix_word_t from, mix_word_t to); @@ -238,6 +238,7 @@ typedef guint16 mix_short_t; ( (s) & (MIX_SHORT_SIGN_BIT - 1) ) #define mix_short_is_positive(s) ( mix_short_sign(s) == 0 ) #define mix_short_is_negative(s) ( mix_short_sign(s) != 0 ) +#define mix_short_reverse_sign(s) ( (s) ^= MIX_SHORT_SIGN_BIT ) /* create short from a long */ #define mix_short_new(val) \ |