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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�!tENbzAe^kJegsA8lR<j zLK?q?`1>_py-#Br|08mc)A#_{`J%=@M!dQYR9+$Czpcru`|U-Ie}Vk|RO2IL=WUH| zC452SpCvng)A*gltLKS|^D`vZOnwyq0`aRg{$=7-J(T=w#P87LXNbQ?<M$GNP~-0- z`HaR-5uVWaT9SW4<DVk_n8u%_Iy|fKGsOQ{<JEe9pz$A){6`vJOPIT)0ER)7AnG+< zy@y+g$9mGIh>%}t<8dw}SjIML{5i_^fX07`<YUCEcm{|c)A(uP^TexoMu;!jczZlw z*LW4r&oq7|#raF(RXo#V|F;^yn&kgzvxD_{gXG_{@%DKBuJJ0KUOF10EdKw7?0<@Q z6_4_Jr^c)I*O1K)#^WbD`)#~Eo|ML`c+|TXW$mX^brw_cz_e(uQLpoU;&HFp_glZl 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