home · contact · privacy
More code re-styling and documentation.
[plomrogue] / src / readwrite.c
index 34ec09beecb86d8ee1e06624163143ca8b71e617..9dbcac4c6cbfc613474f2d4e218f0763fc9453d3 100644 (file)
@@ -1,38 +1,37 @@
+/* readwrite.c */
+
 #include "readwrite.h"
 #include <stdio.h>
 #include <stdint.h>
-#include <limits.h>
-
-static const uint16_t uchar_s = UCHAR_MAX + 1;
 
-extern uint16_t read_uint16_bigendian(FILE * file) {
-// Read uint16 from file in big-endian order.
-  unsigned char a = fgetc(file);
-  unsigned char b = fgetc(file);
-  return (a * uchar_s) + b; }
+extern uint16_t read_uint16_bigendian(FILE * file)
+{
+    uint16_t x;
+    x =     (uint16_t) fgetc(file) << 8;
+    x = x + (uint16_t) fgetc(file);
+    return x;
+}
 
-extern void write_uint16_bigendian(uint16_t x, FILE * file) {
-// Write uint16 to file in beg-endian order.
-  unsigned char a = x / uchar_s;
-  unsigned char b = x % uchar_s;
-  fputc(a, file);
-  fputc(b, file); }
+extern uint32_t read_uint32_bigendian(FILE * file)
+{
+    uint32_t x;
+    x =       (uint32_t) fgetc(file) << 24;
+    x = x + ( (uint32_t) fgetc(file) << 16 );
+    x = x + ( (uint32_t) fgetc(file) <<  8 );
+    x = x +   (uint32_t) fgetc(file);
+    return x;
+}
 
-extern uint32_t read_uint32_bigendian(FILE * file) {
-// Read uint32 from file in big-endian order.
-  unsigned char a = fgetc(file);
-  unsigned char b = fgetc(file);
-  unsigned char c = fgetc(file);
-  unsigned char d = fgetc(file);
-  return (a * uchar_s * uchar_s * uchar_s) + (b * uchar_s * uchar_s) + (c * uchar_s) + d; }
+extern void write_uint16_bigendian(uint16_t x, FILE * file)
+{
+    fputc( x >> 8,   file );
+    fputc( x & 0xFF, file );
+}
 
-extern void write_uint32_bigendian(uint32_t x, FILE * file) {
-// Write uint32 to file in beg-endian order.
-  unsigned char a = x / (uchar_s * uchar_s * uchar_s);
-  unsigned char b = (x - (a * uchar_s * uchar_s * uchar_s)) / (uchar_s * uchar_s);
-  unsigned char c = (x - ((a * uchar_s * uchar_s * uchar_s) + (b * uchar_s * uchar_s))) / uchar_s;
-  unsigned char d = x % uchar_s;
-  fputc(a, file);
-  fputc(b, file);
-  fputc(c, file);
-  fputc(d, file); }
+extern void write_uint32_bigendian(uint32_t x, FILE * file)
+{
+    fputc(   x >> 24,          file);
+    fputc( ( x >> 16 ) & 0xFF, file);
+    fputc( ( x >>  8 ) & 0xFF, file);
+    fputc(   x         & 0xFF, file);
+}