summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mixlib/mix_types.h51
-rw-r--r--samples/permutations.cardrd1
-rw-r--r--samples/permutations.mixal2
-rw-r--r--samples/primes.mixal2
4 files changed, 29 insertions, 27 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) \
diff --git a/samples/permutations.cardrd b/samples/permutations.cardrd
index f626e04..d9e4db6 100644
--- a/samples/permutations.cardrd
+++ b/samples/permutations.cardrd
@@ -1,2 +1,3 @@
( A C F G ) ( B C D ) ( A E D )
( F A D E ) ( B g F a E ) =
+
diff --git a/samples/permutations.mixal b/samples/permutations.mixal
index 24cc682..2c26df5 100644
--- a/samples/permutations.mixal
+++ b/samples/permutations.mixal
@@ -19,7 +19,7 @@ BEGIN IN PERM(CARDS)
OUT OUTBUF(PRINTER)
JE 1F
INC2 16
- CMP2 =MAXWDS-16=,1(1:5)
+ CMP2 =MAXWDS-16=
JLE 1B
HLT 666
1H INC2 15
diff --git a/samples/primes.mixal b/samples/primes.mixal
index d2de8c0..365db32 100644
--- a/samples/primes.mixal
+++ b/samples/primes.mixal
@@ -1,7 +1,7 @@
* table of primes (taopc p. 148)
*
L EQU 500
-OUTDEV EQU 20 the paper tape
+OUTDEV EQU 18 the printer
PRIME EQU -1
BUF0 EQU 2000
BUF1 EQU BUF0+25