100 lines · 3.5 KB · C
RawDownload
/* @(#) pf_save.h 96/12/18 1.8 */#ifndef _pforth_save_h#define _pforth_save_h /***************************************************************** Include file for PForth SaveForth**** Author: Phil Burk** Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom**** The pForth software code is dedicated to the public domain,** and any third party may reproduce, distribute and modify** the pForth software code or any derivative works thereof** without any compensation or license.  The pForth software** code is provided on an "as is" basis without any warranty** of any kind, including, without limitation, the implied** warranties of merchantability and fitness for a particular** purpose and their equivalents under the laws of any jurisdiction.****  941031  rdg     fix redefinition of MAKE_ID and EVENUP to be conditional*****************************************************************/  typedef struct DictionaryInfoChunk{/* All fields are stored in BIG ENDIAN format for consistency in data files. * All fields must be the same size for easy endian conversion. * All fields must be 32 bit for file compatibility with older versions. */    int32_t  sd_Version;    int32_t  sd_RelContext;      /* relative ptr to Dictionary Context */    int32_t  sd_RelHeaderPtr;    /* relative ptr to Dictionary Header Ptr */    int32_t  sd_RelCodePtr;      /* relative ptr to Dictionary Header Ptr */    int32_t  sd_EntryPoint;  /* relative ptr to entry point or NULL */    int32_t  sd_UserStackSize;   /* in bytes */    int32_t  sd_ReturnStackSize; /* in bytes */    int32_t  sd_NameSize;        /* in bytes */    int32_t  sd_CodeSize;        /* in bytes */    int32_t  sd_NumPrimitives;   /* To distinguish between primitive and secondary. */    uint32_t sd_Flags;    int32_t  sd_FloatSize;       /* In bytes. Must match code. 0 means no floats. */    int32_t  sd_CellSize;        /* In bytes. Must match code. */} DictionaryInfoChunk; /* Bits in sd_Flags */#define SD_F_BIG_ENDIAN_DIC    (1<<0) #ifndef MAKE_ID#define MAKE_ID(a,b,c,d) ((((uint32_t)a)<<24)|(((uint32_t)b)<<16)|(((uint32_t)c)<<8)|((uint32_t)d))#endif #define ID_FORM MAKE_ID('F','O','R','M')#define ID_P4TH MAKE_ID('P','4','T','H')#define ID_P4DI MAKE_ID('P','4','D','I')#define ID_P4NM MAKE_ID('P','4','N','M')#define ID_P4CD MAKE_ID('P','4','C','D')#define ID_BADF MAKE_ID('B','A','D','F') #ifndef EVENUP#define EVENUP(n) ((n+1)&(~1))#endif #ifdef __cplusplusextern "C" {#endif cell_t ffSaveForth( const char *FileName, ExecToken EntryPoint, cell_t NameSize, cell_t CodeSize ); /* Endian-ness tools. */int    IsHostLittleEndian( void ); ucell_t ReadCellBigEndian( const uint8_t *addr );uint32_t Read32BigEndian( const uint8_t *addr );uint16_t Read16BigEndian( const uint8_t *addr ); ucell_t ReadCellLittleEndian( const uint8_t *addr );uint32_t Read32LittleEndian( const uint8_t *addr );uint16_t Read16LittleEndian( const uint8_t *addr ); void WriteCellBigEndian( uint8_t *addr, ucell_t data );void Write32BigEndian( uint8_t *addr, uint32_t data );void Write16BigEndian( uint8_t *addr, uint16_t data ); void WriteCellLittleEndian( uint8_t *addr, ucell_t data );void Write32LittleEndian( uint8_t *addr, uint32_t data );void Write16LittleEndian( uint8_t *addr, uint16_t data ); #ifdef PF_SUPPORT_FPvoid WriteFloatBigEndian( PF_FLOAT *addr, PF_FLOAT data );PF_FLOAT ReadFloatBigEndian( const PF_FLOAT *addr );void WriteFloatLittleEndian( PF_FLOAT *addr, PF_FLOAT data );PF_FLOAT ReadFloatLittleEndian( const PF_FLOAT *addr );#endif #ifdef __cplusplus}#endif #endif /* _pforth_save_h */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t