From cbaece42c0073aef0c915966483c5d138315e126 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 19 Jun 2013 02:28:11 +0200
Subject: [PATCH] Moved low-level read/write-to-file functions into their own
 library.

---
 Makefile    |   3 ++-
 readwrite.c |  40 ++++++++++++++++++++++++++++++++++++++++
 readwrite.h |   5 +++++
 readwrite.o | Bin 0 -> 8136 bytes
 roguelike.c |  38 +-------------------------------------
 roguelike.h |   4 ----
 6 files changed, 48 insertions(+), 42 deletions(-)
 create mode 100644 readwrite.c
 create mode 100644 readwrite.h
 create mode 100644 readwrite.o

diff --git a/Makefile b/Makefile
index 72e9113..176bd68 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,9 @@ roguelike:
 	cc -Wall -g -o windows.o -c windows.c
 	cc -Wall -g -o draw_wins.o -c draw_wins.c
 	cc -Wall -g -o keybindings.o -c keybindings.c
+	cc -Wall -g -o readwrite.o -c readwrite.c
 	cc -Wall -g -o roguelike.o -c roguelike.c
-	cc -Wall -g -o roguelike windows.o draw_wins.o keybindings.o roguelike.o -lncurses
+	cc -Wall -g -o roguelike windows.o draw_wins.o keybindings.o readwrite.o roguelike.o -lncurses
 
 clean:
 	rm *.o; rm roguelike
diff --git a/readwrite.c b/readwrite.c
new file mode 100644
index 0000000..ed5a3a3
--- /dev/null
+++ b/readwrite.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <limits.h>
+#include <stdint.h>
+
+uint16_t read_uint16_bigendian(FILE * file) {
+// Read uint16 from file in big-endian order.
+  const uint16_t nchar = UCHAR_MAX + 1;
+  unsigned char a = fgetc(file);
+  unsigned char b = fgetc(file);
+  return (a * nchar) + b; }
+
+void write_uint16_bigendian(uint16_t x, FILE * file) {
+// Write uint16 to file in beg-endian order.
+  const uint16_t nchar = UCHAR_MAX + 1;
+  unsigned char a = x / nchar;
+  unsigned char b = x % nchar;
+  fputc(a, file);
+  fputc(b, file); }
+
+uint32_t read_uint32_bigendian(FILE * file) {
+// Read uint32 from file in big-endian order.
+  const uint16_t nchar = UCHAR_MAX + 1;
+  unsigned char a = fgetc(file);
+  unsigned char b = fgetc(file);
+  unsigned char c = fgetc(file);
+  unsigned char d = fgetc(file);
+  return (a * nchar * nchar * nchar) + (b * nchar * nchar) + (c * nchar) + d; }
+
+void write_uint32_bigendian(uint32_t x, FILE * file) {
+// Write uint32 to file in beg-endian order.
+  const uint16_t nchar = UCHAR_MAX + 1;
+  unsigned char a = x / (nchar * nchar * nchar);
+  unsigned char b = (x - (a * nchar * nchar * nchar)) / (nchar * nchar);
+  unsigned char c = (x - ((a * nchar * nchar * nchar) + (b * nchar * nchar))) / nchar;
+  unsigned char d = x % nchar;
+  fputc(a, file);
+  fputc(b, file);
+  fputc(c, file);
+  fputc(d, file); }
+
diff --git a/readwrite.h b/readwrite.h
new file mode 100644
index 0000000..28bc3ab
--- /dev/null
+++ b/readwrite.h
@@ -0,0 +1,5 @@
+uint16_t read_uint16_bigendian(FILE * file);
+void write_uint16_bigendian(uint16_t x, FILE * file);
+uint32_t read_uint32_bigendian(FILE * file);
+void write_uint32_bigendian(uint32_t x, FILE * file);
+
diff --git a/readwrite.o b/readwrite.o
new file mode 100644
index 0000000000000000000000000000000000000000..b8faf761d6349aed5c9e54d819c9bce466228869
GIT binary patch
literal 8136
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
Q4-g*F_-Vq2HD1->-_^wv>;M1&

literal 0
HcmV?d00001

diff --git a/roguelike.c b/roguelike.c
index 2bab85f..f0057e2 100644
--- a/roguelike.c
+++ b/roguelike.c
@@ -1,5 +1,4 @@
 #include <stdlib.h>
-#include <limits.h>
 #include <stdint.h>
 #include <ncurses.h>
 #include <string.h>
@@ -9,6 +8,7 @@
 #include "draw_wins.h"
 #include "roguelike.h"
 #include "keybindings.h"
+#include "readwrite.h"
 
 uint16_t rrand(char use_seed, uint32_t new_seed) {
 // Pseudo-random number generator (LGC algorithm). Use instead of rand() to ensure portable predictability.
@@ -18,42 +18,6 @@ uint16_t rrand(char use_seed, uint32_t new_seed) {
   seed = ((seed * 1103515245) + 12345) % 2147483648;   // Values as recommended by POSIX.1-2001 (see rand(3)).
   return (seed / 65536); }                         // Ignore least significant 16 bits (they are less random).
 
-uint16_t read_uint16_bigendian(FILE * file) {
-// Read uint16 from file in big-endian order.
-  const uint16_t nchar = UCHAR_MAX + 1;
-  unsigned char a = fgetc(file);
-  unsigned char b = fgetc(file);
-  return (a * nchar) + b; }
-
-void write_uint16_bigendian(uint16_t x, FILE * file) {
-// Write uint16 to file in beg-endian order.
-  const uint16_t nchar = UCHAR_MAX + 1;
-  unsigned char a = x / nchar;
-  unsigned char b = x % nchar;
-  fputc(a, file);
-  fputc(b, file); }
-
-uint32_t read_uint32_bigendian(FILE * file) {
-// Read uint32 from file in big-endian order.
-  const uint16_t nchar = UCHAR_MAX + 1;
-  unsigned char a = fgetc(file);
-  unsigned char b = fgetc(file);
-  unsigned char c = fgetc(file);
-  unsigned char d = fgetc(file);
-  return (a * nchar * nchar * nchar) + (b * nchar * nchar) + (c * nchar) + d; }
-
-void write_uint32_bigendian(uint32_t x, FILE * file) {
-// Write uint32 to file in beg-endian order.
-  const uint16_t nchar = UCHAR_MAX + 1;
-  unsigned char a = x / (nchar * nchar * nchar);
-  unsigned char b = (x - (a * nchar * nchar * nchar)) / (nchar * nchar);
-  unsigned char c = (x - ((a * nchar * nchar * nchar) + (b * nchar * nchar))) / nchar;
-  unsigned char d = x % nchar;
-  fputc(a, file);
-  fputc(b, file);
-  fputc(c, file);
-  fputc(d, file); }
-
 void save_game(struct World * world) {
 // Save game data to game file.
   FILE * file = fopen("savefile", "w");
diff --git a/roguelike.h b/roguelike.h
index 3fdbbaf..d82313e 100644
--- a/roguelike.h
+++ b/roguelike.h
@@ -25,10 +25,6 @@ struct Monster {
   uint16_t x; };
 
 uint16_t rrand(char, uint32_t);
-uint16_t read_uint16_bigendian(FILE * file);
-void write_uint16_bigendian(uint16_t x, FILE * file);
-uint32_t read_uint32_bigendian(FILE * file);
-void write_uint32_bigendian(uint32_t x, FILE * file);
 void save_game(struct World *);
 void toggle_window (struct WinMeta *, struct Win *);
 void scroll_pad (struct WinMeta *, char);
-- 
2.30.2