-#define FILE_FLAG_MODE_MASK 0x07
-#define FILE_FLAG_MODE_READ 0x01
-#define FILE_FLAG_MODE_WRITE 0x02
-#define FILE_FLAG_MODE_EXEC 0x03
-#define FILE_FLAG_MODE_APPEND 0x04
-#define FILE_FLAG_M_EXT 0x10
+#define FILE_FLAG_MODE_READ 0x0001
+#define FILE_FLAG_MODE_WRITE 0x0002
+#define FILE_FLAG_MODE_EXEC 0x0003
+#define FILE_FLAG_MODE_APPEND 0x0004
+#define FILE_FLAG_MODE_MASK 0x0007
+
+#define FILE_FLAG_M_EXT 0x0010
+#define FILE_FLAG_M_BINARY 0x0020
+
+#define FILE_FLAG_EOF 0x0100
+#define FILE_FLAG_LINEBUFFERED 0x1000 // Flush when '\n' encountered
+
+#define FILE_FLAG_ALLOC 0x8000 // Internal 'is used' flag
+
+#define _GetFileMode(fp) ((fp)->Flags & FILE_FLAG_MODE_MASK)