V25 with 64-bit support
[pforth] / csrc / pf_save.h
index f4d1e7a..3bf8c2f 100644 (file)
 \r
 typedef struct DictionaryInfoChunk\r
 {\r
 \r
 typedef struct DictionaryInfoChunk\r
 {\r
-/* All fields are stored in BIG ENDIAN format for consistency in data files. */\r
-/* All fileds must be the same size as int32 for easy endian conversion. */\r
-       int32  sd_Version;\r
-       int32  sd_RelContext;      /* relative ptr to Dictionary Context */\r
-       int32  sd_RelHeaderPtr;    /* relative ptr to Dictionary Header Ptr */\r
-       int32  sd_RelCodePtr;      /* relative ptr to Dictionary Header Ptr */\r
-       ExecToken  sd_EntryPoint;  /* relative ptr to entry point or NULL */\r
-       int32  sd_UserStackSize;   /* in bytes */\r
-       int32  sd_ReturnStackSize; /* in bytes */\r
-       int32  sd_NameSize;        /* in bytes */\r
-       int32  sd_CodeSize;        /* in bytes */\r
-       int32  sd_NumPrimitives;   /* To distinguish between primitive and secondary. */\r
-       uint32 sd_Flags;\r
-       int32  sd_FloatSize;       /* In bytes. Must match code. 0 means no floats. */\r
-       uint32 sd_Reserved;\r
+/* All fields are stored in BIG ENDIAN format for consistency in data files.\r
+ * All fields must be the same size for easy endian conversion.\r
+ * All fields must be 32 bit for file compatibility with older versions.\r
+ */\r
+       int32_t  sd_Version;\r
+       int32_t  sd_RelContext;      /* relative ptr to Dictionary Context */\r
+       int32_t  sd_RelHeaderPtr;    /* relative ptr to Dictionary Header Ptr */\r
+       int32_t  sd_RelCodePtr;      /* relative ptr to Dictionary Header Ptr */\r
+       int32_t  sd_EntryPoint;  /* relative ptr to entry point or NULL */\r
+       int32_t  sd_UserStackSize;   /* in bytes */\r
+       int32_t  sd_ReturnStackSize; /* in bytes */\r
+       int32_t  sd_NameSize;        /* in bytes */\r
+       int32_t  sd_CodeSize;        /* in bytes */\r
+       int32_t  sd_NumPrimitives;   /* To distinguish between primitive and secondary. */\r
+       uint32_t sd_Flags;\r
+       int32_t  sd_FloatSize;       /* In bytes. Must match code. 0 means no floats. */\r
+       int32_t  sd_CellSize;        /* In bytes. Must match code. */\r
 } DictionaryInfoChunk;\r
 \r
 /* Bits in sd_Flags */\r
 #define SD_F_BIG_ENDIAN_DIC    (1<<0)\r
 \r
 #ifndef MAKE_ID\r
 } DictionaryInfoChunk;\r
 \r
 /* Bits in sd_Flags */\r
 #define SD_F_BIG_ENDIAN_DIC    (1<<0)\r
 \r
 #ifndef MAKE_ID\r
-#define MAKE_ID(a,b,c,d) ((((uint32)a)<<24)|(((uint32)b)<<16)|(((uint32)c)<<8)|((uint32)d))\r
+#define MAKE_ID(a,b,c,d) ((((uint32_t)a)<<24)|(((uint32_t)b)<<16)|(((uint32_t)c)<<8)|((uint32_t)d))\r
 #endif\r
 \r
 #define ID_FORM MAKE_ID('F','O','R','M')\r
 #endif\r
 \r
 #define ID_FORM MAKE_ID('F','O','R','M')\r
@@ -63,19 +65,26 @@ typedef struct DictionaryInfoChunk
 extern "C" {\r
 #endif\r
 \r
 extern "C" {\r
 #endif\r
 \r
-int32 ffSaveForth( const char *FileName, ExecToken EntryPoint, int32 NameSize, int32 CodeSize );\r
+cell_t ffSaveForth( const char *FileName, ExecToken EntryPoint, cell_t NameSize, cell_t CodeSize );\r
 \r
 /* Endian-ness tools. */\r
 \r
 /* Endian-ness tools. */\r
-\r
 int    IsHostLittleEndian( void );\r
 int    IsHostLittleEndian( void );\r
-uint32 ReadLongBigEndian( const uint32 *addr );\r
-uint16 ReadShortBigEndian( const uint16 *addr );\r
-uint32 ReadLongLittleEndian( const uint32 *addr );\r
-uint16 ReadShortLittleEndian( const uint16 *addr );\r
-void WriteLongBigEndian( uint32 *addr, uint32 data );\r
-void WriteShortBigEndian( uint16 *addr, uint16 data );\r
-void WriteLongLittleEndian( uint32 *addr, uint32 data );\r
-void WriteShortLittleEndian( uint16 *addr, uint16 data );\r
+       \r
+ucell_t ReadCellBigEndian( const uint8_t *addr );\r
+uint32_t Read32BigEndian( const uint8_t *addr );\r
+uint16_t Read16BigEndian( const uint8_t *addr );\r
+       \r
+ucell_t ReadCellLittleEndian( const uint8_t *addr );\r
+uint32_t Read32LittleEndian( const uint8_t *addr );\r
+uint16_t Read16LittleEndian( const uint8_t *addr );\r
+       \r
+void WriteCellBigEndian( uint8_t *addr, ucell_t data );\r
+void Write32BigEndian( uint8_t *addr, uint32_t data );\r
+void Write16BigEndian( uint8_t *addr, uint16_t data );\r
+       \r
+void WriteCellLittleEndian( uint8_t *addr, ucell_t data );\r
+void Write32LittleEndian( uint8_t *addr, uint32_t data );\r
+void Write16LittleEndian( uint8_t *addr, uint16_t data );\r
 \r
 #ifdef PF_SUPPORT_FP\r
 void WriteFloatBigEndian( PF_FLOAT *addr, PF_FLOAT data );\r
 \r
 #ifdef PF_SUPPORT_FP\r
 void WriteFloatBigEndian( PF_FLOAT *addr, PF_FLOAT data );\r