From cbaece42c0073aef0c915966483c5d138315e126 Mon Sep 17 00:00:00 2001 From: Christian Heller 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 +#include +#include + +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 zcmbtY3v3)m8J^km+2{Cm&bf)xG|4%pc}V!qb`m!vkhpO#v8ASsXe}xw>iHgf=c~_q z$2}Z3^buMq|p8aED9YB-EhL|Ew6-blx7kwr-$cZc%7d=_ogyY`gpKZyqGA3 z=A@yPGoiU3qm{&!;yhS#;L`b{Az^HAYWU({>0NS&Hl0kx{(l>yGvaGbc(vt~VT@$H z<@9-xz)S^P<2G>Bk=mnkA~#W>mNSq$SrFY!DKtApxn3#GVyZSL4#}zExzalue_nd4 z<;-3%0)|e%QyQKXWfH1TlSSf_u51Q|=N+2Y&}2D`%UEDY78me87Z_xqMw-l3Cv)!2 zlQoPPxR}f%wpX=1CZ_Qs1dZQqg`vw+hm4DRL}y4;Lu9Qa-PqOCxKmaE6a*3`TwhMX zgd9GNL$c=f)Ox;#kP8Dspr-qIV1(U2xIeOh6CT}HqG+O%(DknfA&`oeq!dim+B&;L&fQ0q@`w+U(IU->Le@Vbm z37fdgCM#hp!GeT7o)y_mO1PZw2I%TM%q4E;_Y3?4;T8NeH@h+kND&Z|6dRONggzw;Q3;)01YzYW5_cz39 zw!6QJC6TN0oU9I^X;~av&F7<_WORC2t)~bIwI19M4Y*G*uf`)VKo+-#U@s`vC%0H_ z57rAvklM5tu1#{MyE#f$Yy4gpW8%Te-8eLkKhT15ylz+^%Nt?bvlAHO__#O9c)c8_ zA&hSV+lq#lN-vF7?jplTjls6)+V!BRXr=rXcY!i&S;e*qct|Sew*74 zo7=TEx1Gu@x>+SJEm5HwW$r^afK_EM1J7Oz02@MpK2ngJCRZM&bu^se&1ZVGQ{~JZ>feqj;z+ zJe)Q2FofiQPGw-|VhsGNA+lCM(r}wl5g1$cljNmKo^H?DED_Z$f(lX=z*k~jN zL087;VpA`qP!_?oFcxVKEMc-}O$0~sm5}z_GwdJmi=}4aa5fU}5!x~Vk!iSS74v4i zSMb6J)sCR2s3Y%cSV87t(2*>q++mq`|(+UO7LVz)_l zn`O6!S;AVSj*w&}Xi-6jZ_HQ<1=-jUx7yoWxyWWtdnr)Wh`#KWxvyz&8H|sP#rFHEYA01R6i| zS;i;5d}U*u=NQ~8w*iO$*aq-&XS4T+G0;@|7zhBwxlbbxZ3HiB-qm znV%@nKY~28CHPcQ`YtyY0)hO)92J z;gprgz?>LIqS2f=p%4_pAsNX z=4d#Pi;SBhmH+$V2MbsZc<(z}KOy}oTjP*oY$afwLy^&CQqYgap~0(I_)*XBcEK{X zj(B)5I@)OYVd$V2_`ST}kJ@wW^4x28!uL_59z2xYyrl3J_FX-Z|wG zcb1bwx3TnkKQ%{f$~ajgarDb zuO^Q_IiUPB$%%J8jPc!%y!sju?|78KGm$tU!TG%U`6!Vz3o%wXaybr9iEI%j%ZiTU zSVhG_qgQsTxXQhaRlR;wHp~|r?s+?p&k=0M<2|M1zl9_;oqt`@3+()A5&ln$@Ef{mo#}iA7NAP5mkprD1Nm+6@P^6oRVr~zrQB@ zvc?Y+p3(RNWdFRzA0m7~_py-#Br|08mc)A#_{`J%=@M!dQYR9+$Czpcru`|U-Ie}Vk|RO2IL=WUH| zC452SpCvng)A*gltLKS|^D`vZOnwyq0`aRg{$=7-J(T=w#P87LXNbQ?%}t<8dw}SjIML{5i_^fX07`-_^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 -#include #include #include #include @@ -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