* in original (data) byte order, implemented externally (it
* actually is optional if data and host are of the same
* "endianess").
+ * HASH_MAKE_STRING
+ * macro convering context variables to an ASCII hash string.
*
* Optional macros:
*
#undef ROTATE
#ifndef PEDANTIC
# if defined(_MSC_VER)
-# define ROTATE(a,n) _lrotl(a,n)
+# define ROTATE(a,n) _lrotl(a,n)
+# elif defined(__MWERKS__)
+# if defined(__POWERPC__)
+# define ROTATE(a,n) __rlwinm(a,n,0,31)
+# elif defined(__MC68K__)
+ /* Motorola specific tweak. <appro@fy.chalmers.se> */
+# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
+# else
+# define ROTATE(a,n) __rol(a,n)
+# endif
# elif defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM)
/*
* Some GNU C inline assembler templates. Note that these are
#endif
HASH_BLOCK_HOST_ORDER (c,p,1);
- l=c->A; HOST_l2c(l,md);
- l=c->B; HOST_l2c(l,md);
- l=c->C; HOST_l2c(l,md);
- l=c->D; HOST_l2c(l,md);
+#ifndef HASH_MAKE_STRING
+#error "HASH_MAKE_STRING must be defined!"
+#else
+ HASH_MAKE_STRING(c,md);
+#endif
c->num=0;
/* clear stuff, HASH_BLOCK may be leaving some stuff on the stack