home · contact · privacy
More code re-styling and documentation.
[plomrogue] / src / readwrite.c
index fd520685a935f978584851feaaf69a51878de802..9dbcac4c6cbfc613474f2d4e218f0763fc9453d3 100644 (file)
@@ -1,36 +1,37 @@
+/* readwrite.c */
+
+#include "readwrite.h"
 #include <stdio.h>
-#include <limits.h>
 #include <stdint.h>
-#define UCHARSIZE (UCHAR_MAX + 1)
 
-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 * UCHARSIZE) + 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;
+}
 
-void write_uint16_bigendian(uint16_t x, FILE * file) {
-// Write uint16 to file in beg-endian order.
-  unsigned char a = x / UCHARSIZE;
-  unsigned char b = x % UCHARSIZE;
-  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;
+}
 
-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 * UCHARSIZE * UCHARSIZE * UCHARSIZE) + (b * UCHARSIZE * UCHARSIZE) + (c * UCHARSIZE) + d; }
+extern void write_uint16_bigendian(uint16_t x, FILE * file)
+{
+    fputc( x >> 8,   file );
+    fputc( x & 0xFF, file );
+}
 
-void write_uint32_bigendian(uint32_t x, FILE * file) {
-// Write uint32 to file in beg-endian order.
-  unsigned char a = x / (UCHARSIZE * UCHARSIZE * UCHARSIZE);
-  unsigned char b = (x - (a * UCHARSIZE * UCHARSIZE * UCHARSIZE)) / (UCHARSIZE * UCHARSIZE);
-  unsigned char c = (x - ((a * UCHARSIZE * UCHARSIZE * UCHARSIZE) + (b * UCHARSIZE * UCHARSIZE))) / UCHARSIZE;
-  unsigned char d = x % UCHARSIZE;
-  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);
+}