summaryrefslogtreecommitdiff
path: root/src/z-util.c
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2010-01-08 20:28:34 +0100
committerBardur Arantsson <bardur@scientician.net>2010-01-08 23:46:06 +0100
commit6aa48afdd57d03314fdf4be6c9da911c32277c84 (patch)
tree2dc401f9aae2dc6736d2fc3811c8f8099d3eabe6 /src/z-util.c
Import tome-2.3.5.
Diffstat (limited to 'src/z-util.c')
-rw-r--r--src/z-util.c231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/z-util.c b/src/z-util.c
new file mode 100644
index 00000000..f0842b07
--- /dev/null
+++ b/src/z-util.c
@@ -0,0 +1,231 @@
+/* File: z-util.c */
+
+/* Purpose: Low level utilities -BEN- */
+
+#include "z-util.h"
+
+
+
+/*
+ * Global variables for temporary use
+ */
+char char_tmp = 0;
+byte byte_tmp = 0;
+sint sint_tmp = 0;
+uint uint_tmp = 0;
+long long_tmp = 0;
+huge huge_tmp = 0;
+errr errr_tmp = 0;
+
+
+/*
+ * Global pointers for temporary use
+ */
+cptr cptr_tmp = NULL;
+vptr vptr_tmp = NULL;
+
+
+
+
+/*
+ * Constant bool meaning true
+ */
+bool bool_true = 1;
+
+/*
+ * Constant bool meaning false
+ */
+bool bool_false = 0;
+
+
+/*
+ * Global NULL cptr
+ */
+cptr cptr_null = NULL;
+
+
+/*
+ * Global NULL vptr
+ */
+vptr vptr_null = NULL;
+
+
+
+/*
+ * Global SELF vptr
+ */
+vptr vptr_self = (vptr)(&vptr_self);
+
+
+
+/*
+ * Convenient storage of the program name
+ */
+cptr argv0 = NULL;
+
+
+
+/*
+ * A routine that does nothing
+ */
+void func_nothing(void)
+{
+ /* Do nothing */
+}
+
+
+/*
+ * A routine that always returns "success"
+ */
+errr func_success(void)
+{
+ return (0);
+}
+
+
+/*
+ * A routine that always returns a simple "problem code"
+ */
+errr func_problem(void)
+{
+ return (1);
+}
+
+
+/*
+ * A routine that always returns a simple "failure code"
+ */
+errr func_failure(void)
+{
+ return ( -1);
+}
+
+
+
+/*
+ * A routine that always returns "true"
+ */
+bool func_true(void)
+{
+ return (1);
+}
+
+
+/*
+ * A routine that always returns "false"
+ */
+bool func_false(void)
+{
+ return (0);
+}
+
+
+
+
+/*
+ * Determine if string "t" is equal to string "t"
+ */
+bool streq(cptr a, cptr b)
+{
+ return (!strcmp(a, b));
+}
+
+
+/*
+ * Determine if string "t" is a suffix of string "s"
+ */
+bool suffix(cptr s, cptr t)
+{
+ int tlen = strlen(t);
+ int slen = strlen(s);
+
+ /* Check for incompatible lengths */
+ if (tlen > slen) return (FALSE);
+
+ /* Compare "t" to the end of "s" */
+ return (!strcmp(s + slen - tlen, t));
+}
+
+
+
+
+/*
+ * Redefinable "plog" action
+ */
+void (*plog_aux)(cptr) = NULL;
+
+/*
+ * Print (or log) a "warning" message (ala "perror()")
+ * Note the use of the (optional) "plog_aux" hook.
+ */
+void plog(cptr str)
+{
+ /* Use the "alternative" function if possible */
+ if (plog_aux) (*plog_aux)(str);
+
+ /* Just do a labeled fprintf to stderr */
+ else (void)(fprintf(stderr, "%s: %s\n", argv0 ? argv0 : "???", str));
+}
+
+
+
+/*
+ * Redefinable "quit" action
+ */
+void (*quit_aux)(cptr) = NULL;
+
+/*
+ * Exit (ala "exit()"). If 'str' is NULL, do "exit(0)".
+ * If 'str' begins with "+" or "-", do "exit(atoi(str))".
+ * Otherwise, plog() 'str' and exit with an error code of -1.
+ * But always use 'quit_aux', if set, before anything else.
+ */
+void quit(cptr str)
+{
+ /* Attempt to use the aux function */
+ if (quit_aux) (*quit_aux)(str);
+
+ /* Success */
+ if (!str) (void)(exit(0));
+
+ /* Extract a "special error code" */
+ if ((str[0] == '-') || (str[0] == '+')) (void)(exit(atoi(str)));
+
+ /* Send the string to plog() */
+ plog(str);
+
+ /* Failure */
+ (void)(exit( -1));
+}
+
+
+
+/*
+ * Redefinable "core" action
+ */
+void (*core_aux)(cptr) = NULL;
+
+/*
+ * Dump a core file, after printing a warning message
+ * As with "quit()", try to use the "core_aux()" hook first.
+ */
+void core(cptr str)
+{
+ char *crash = NULL;
+
+ /* Use the aux function */
+ if (core_aux) (*core_aux)(str);
+
+ /* Dump the warning string */
+ if (str) plog(str);
+
+ /* Attempt to Crash */
+ (*crash) = (*crash);
+
+ /* Be sure we exited */
+ quit("core() failed");
+}
+
+
+
+