-/* File z-util.h */
+/* File z-util.h */
+
+/*
+ * Copyright (c) 1997 Ben Harrison
+ *
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies.
+ */
#ifndef INCLUDED_Z_UTIL_H
#define INCLUDED_Z_UTIL_H
/**** Available variables ****/
-/* Temporary Vars */
-extern char char_tmp;
-extern byte byte_tmp;
-extern sint sint_tmp;
-extern uint uint_tmp;
-extern long long_tmp;
-extern huge huge_tmp;
-extern errr errr_tmp;
-
-/* Temporary Pointers */
-extern cptr cptr_tmp;
-extern vptr vptr_tmp;
-
-
-/* Constant pointers (NULL) */
-extern cptr cptr_null;
-extern vptr vptr_null;
-
-
-/* A bizarre vptr that always points at itself */
-extern vptr vptr_self;
-
-
-/* A cptr to the name of the program */
-extern cptr argv0;
+/* A concptr to the name of the program */
+extern concptr argv0;
/* Aux functions */
-extern void (*plog_aux)(cptr);
-extern void (*quit_aux)(cptr);
-extern void (*core_aux)(cptr);
+extern void (*plog_aux)(concptr);
+extern void (*quit_aux)(concptr);
+extern void (*core_aux)(concptr);
/**** Available Functions ****/
-/* Function that does nothing */
-extern void func_nothing(void);
-
-/* Functions that return basic "errr" codes */
-extern errr func_success(void);
-extern errr func_problem(void);
-extern errr func_failure(void);
-
-/* Functions that return bools */
-extern bool func_true(void);
-extern bool func_false(void);
-
-
/* Test equality, prefix, suffix */
-extern bool streq(cptr s, cptr t);
-extern bool prefix(cptr s, cptr t);
-extern bool suffix(cptr s, cptr t);
+extern bool streq(concptr s, concptr t);
+extern bool prefix(concptr s, concptr t);
+extern bool suffix(concptr s, concptr t);
/* Print an error message */
-extern void plog(cptr str);
+extern void plog(concptr str);
/* Exit, with optional message */
-extern void quit(cptr str);
+extern void quit(concptr str);
/* Dump core, with optional message */
-extern void core(cptr str);
+extern void core(concptr str);
+/* 64-bit integer operations */
+#define s64b_LSHIFT(V1, V2, N) {V1 = (V1<<(N)) | (V2>>(32-(N))); V2 <<= (N);}
+#define s64b_RSHIFT(V1, V2, N) {V2 = (V1<<(32-(N))) | (V2>>(N)); V1 >>= (N);}
+extern void s64b_add(s32b *A1, u32b *A2, s32b B1, u32b B2);
+extern void s64b_sub(s32b *A1, u32b *A2, s32b B1, u32b B2);
+extern int s64b_cmp(s32b A1, u32b A2, s32b B1, u32b B2);
+extern void s64b_mul(s32b *A1, u32b *A2, s32b B1, u32b B2);
+extern void s64b_div(s32b *A1, u32b *A2, s32b B1, u32b B2);
+extern void s64b_mod(s32b *A1, u32b *A2, s32b B1, u32b B2);
+
#endif
+extern int count_bits(BIT_FLAGS x);
+extern int mysqrt(int n);
+