summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/HACKING.txt36
-rw-r--r--src/log.cpp40
2 files changed, 65 insertions, 11 deletions
diff --git a/docs/HACKING.txt b/docs/HACKING.txt
new file mode 100644
index 00000000..ba080f0f
--- /dev/null
+++ b/docs/HACKING.txt
@@ -0,0 +1,36 @@
+----------------------------
+The Mana World Hacking Guide
+----------------------------
+
+With multiple coders working on the same source files, there needs to be a
+standard specifying how code is written down. Not doing so can cause quite some
+annoyance for certain coders and easily creates more version conflicts than
+necessary.
+
+* Code is indented using 4 spaces, no tabs.
+
+* Control constructs like this:
+
+ if (condition) {
+ }
+
+ for (init; condition; step) {
+ }
+
+ while (condition) {
+ }
+
+ /*
+ * Documentation about behaviour
+ */
+ void function(param1, param2) {
+ }
+
+ Ending parenthesis may be on next line for clarity.
+
+* Use of whitespace example:
+
+ x = ((5 + 4) * 3) / 1.5;
+
+* Agreement on function/class/variable/method/member naming pending.
+
diff --git a/src/log.cpp b/src/log.cpp
index 710a1fc3..578fa957 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -21,36 +21,42 @@
#include "log.h"
-int warning_n; // Keep warning number
FILE* logfile;
#define LOG_FILE "./docs/tmw.log"
-
+/*
+ * Initializes log file by opening it for writing.
+ */
void init_log() {
logfile = fopen(LOG_FILE, "w");
if (!logfile) {
printf("Warning: error while opening log file.\n");
}
- warning_n = 0;
}
+/*
+ * Enter a message in the log with a certain category. The message will be
+ * timestamped.
+ */
void log(const char *category, const char *log_text, ...) {
if (logfile) {
char* buf = new char[1024];
-
va_list ap;
+ time_t t;
+
+ // Use a temporary buffer to fill in the variables
va_start(ap, log_text);
vsprintf(buf, log_text, ap);
va_end(ap);
- time_t t;
+ // Get the current system time
time(&t);
- fprintf(
- logfile,
+ // Print the log entry
+ fprintf(logfile,
"[%s%d:%s%d:%s%d] %s: %s\n",
(((t / 60) / 60) % 24 < 10) ? "0" : "",
(int)(((t / 60) / 60) % 24),
@@ -60,28 +66,40 @@ void log(const char *category, const char *log_text, ...) {
(int)(t % 60),
category, buf
);
+
+ // Flush the log file
fflush(logfile);
+ // Delete temporary buffer
delete[] buf;
}
}
-
-void error(string error_text) {
+/*
+ * Log an error and quit. The error will pop-up in Windows and will be printed
+ * to standard error everywhere else.
+ */
+void error(const string error_text) {
log("Error", error_text.c_str());
#ifdef WIN32
MessageBox(NULL, error_text.c_str(), "Error", MB_ICONERROR|MB_OK);
#else
- printf("Error: %s", error_text);
+ fprintf(stderr, "Error: %s\n", error_text);
#endif
- //exit(1);
+ exit(1);
}
+/*
+ * Shortcut to log a warning.
+ */
void warning(const char *warning_text) {
log("Warning", warning_text);
}
+/*
+ * Shortcut to log a status update, will only really be logged in debug mode.
+ */
void status(const char *status_text) {
#ifdef DEBUG
log("Status", status_text);