Michael Heilmann's Arcadia Ring 2
This is the documentation for Michael Heilmann's Arcadia Ring 2. Arcadia Ring 2 facilitates the creation of C programs - in particular interpreters - that are portable, maintainable, as well as safe. Arcadia Ring 2 is available at michaelheilmann.com/Arcadia/Ring2.
Features:
- UTF-8 strings and string buffers, decoders and encoders
- 32 and 64 Bit IEEE 754 floating point <=> UTF-8 string conversions based on the works of Steele & White, Gay, Clinger, Lemire & Musthak.
- Other scalar types (Void, Boolean, Integer, Natural) <=> UTF-8 string conversions
- aggregates (array lists, array deques, hash maps)
- File System implementation for Windows and Linux supporting creation and deletation of files, reading and writing files, enumerating contents of folder
Files
You can find the sources of Arcadia Ring 2 in my GitHub repository https://github.com/michaelheilmann/michaelheilmann.com. The subdirectory of Arcadia Ring 2 in the repository is here https://github.com/michaelheilmann/michaelheilmann.com-arcadia/tree/main/Runtime/Ring2.
- The (sources of the) library resides in the directory https://github.com/michaelheilmann/michaelheilmann.com-arcadia/tree/main/Runtime/Ring2/Library
- The (sources of) tests reside in the directory https://github.com/michaelheilmann/michaelheilmann.com-arcadia/tree/main/Runtime/Ring2/Tests
- The (sources of this very documentation you are reading) documentation reside in the directory https://github.com/michaelheilmann/michaelheilmann.com-arcadia/tree/main/Runtime/Ring2/Documentation
Arcadia Ring 2 supports various platforms (including but not restricted to Windows, Linux, and many more), however, we currently only officially support Windows. For instructions on how to build, test, and use Arcadia Ring 1, refer to README.md in the root folder of the repository.
Further References
Arcadia Ring 2 relies on Arcadia Ring 1 and Arcadia ARMS.
Documentation
Arcadia_ExistingFilePolicy
typedef enum Arcadia_ExistingFilePolicy Arcadia_ExistingFilePolicy;
Elements
Arcadia_ExistingFilePolicy_RetainArcadia_ExistingFilePolicy_TruncateArcadia_FileAccessMode
typedef enum Arcadia_FileAccessMode Arcadia_FileAccessMode;
Elements
Arcadia_FileAccessMode_ReadArcadia_FileAccessMode_Write.
Arcadia_FileAccessMode_WriteArcadia_FileAccessMode_Read.
Arcadia_FileAccessMode_ReadWriteArcadia_FileAccessMode_Read|Arcadia_FileAccessMode_Write and for Arcadia_FileAccessMode_WriteRead.
Arcadia_FileAccessMode_WriteReadArcadia_FileAccessMode_Write|Arcadia_FileAccessMode_Read and for Arcadia_FileAccessMode_ReadWrite.
Arcadia_FileHandle
Arcadia_FileHandle extends Arcadia_Object.
Arcadia_FileHandle represents a operating system file handle.
Arcadia_FileHandle_create
Arcadia_FileHandle*
Arcadia_FileHandle_create
(
Arcadia_Thread* thread,
Arcadia_FileSystem* fileSystem
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the file handle.
Arcadia_FileHandle_close
void
Arcadia_FileHandle_close
(
Arcadia_Thread* thread,
Arcadia_FileHandle* self
)
Parameters
Arcadia_Thread object.Arcadia_FileHandle_openForReading
void
Arcadia_FileHandle_openForReading
(
Arcadia_Thread* thread,
Arcadia_FileHandle* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Errors
self is a null pointer.path is a null pointer.Arcadia_FileHandle_openForWriting
void
Arcadia_FileHandle_openForWriting
(
Arcadia_FileHandle* self,
Arcadia_FilePath* path
)
Parameters
Errors
self is a null pointer.path is a null pointer.Arcadia_FileHandle_isClosed
Arcadia_BooleanValue
Arcadia_FileHandle_isClosed
(
Arcadia_FileHandle const* self
)
Parameters
Return value
Arcadia_BooleanValue_True if this file handle is closed.
Arcadia_BooleanValue_False otherwise.
Arcadia_FileHandle_isOpened
Arcadia_BooleanValue
Arcadia_FileHandle_isOpened
(
Arcadia_FileHandle const* self
)
Parameters
Return value
Arcadia_BooleanValue_True if this file handle is opened.
Arcadia_BooleanValue_False otherwise.
Arcadia_FileHandle_isOpenedForReading
Arcadia_BooleanValue
Arcadia_FileHandle_isOpenedForReading
(
Arcadia_FileHandle const* self
)
Parameters
Return value
Arcadia_BooleanValue_True if this file handle is opened for reading.
Arcadia_BooleanValue_False otherwise.
Arcadia_FileHandle_isOpenedForWriting
Arcadia_BooleanValue
Arcadia_FileHandle_isOpenedForWriting
(
Arcadia_FileHandle const* self
)
Parameters
Return value
Arcadia_BooleanValue_True if this file handle is opened for writing.
Arcadia_BooleanValue_False otherwise.
Arcadia_FileHandle_write
void
Arcadia_FileHandle_write
(
Arcadia_FileHandle* self,
void const* p,
Arcadia_SizeValue bytesToWrite
)
Parameters
bytesToWrite Bytes.bytes.Arcadia_SizeValue variable.Success
*bytesWritten is assigned the actual number of Bytes written.
Errors
self is a null pointer. bytes is a null pointer.Arcadia_FileHandle_read
void
Arcadia_FileHandle_read
(
Arcadia_FileHandle* self,
void const* bytes,
Arcadia_SizeValue bytesToRead,
Arcadia_SizeValue* bytesRead
)
Parameters
bytesToWrite Bytes.bytes.Arcadia_SizeValue variable.Success
*bytesRead is assigned the actual number of Bytes read.
The number of Bytes read is 0 if the end of the file was reached.
Errors
self is a null pointer.bytes is a null pointer.bytesRead is a null pointer.Arcadia_FilePath
Arcadia_FilePath extends Arcadia_Object.
Arcadia_FilePath represents a file path.
create
Arcadia_FilePath*
Arcadia_FilePath_create
(
Arcadia_Thread* thread
)
Parameters
Arcadia_Thread object.Return value
A pointer to the file path.
Arcadia_FilePath_parseGeneric
Arcadia_FilePath*
Arcadia_FilePath_parseGeneric
(
Arcadia_Thread* thread,
void const* bytes,
Arcadia_SizeValue numberOfBytes
)
Parameters
Arcadia_Thread object.numberOfBytes Bytes.bytes Bytes.Return value
A pointer to the file path.
Errors
self is a null pointer.bytes is a null pointer.Arcadia_FilePath_parseNative
Arcadia_FilePath*
Arcadia_FilePath_parseNative
(
Arcadia_Thread* thread,
void const* bytes,
Arcadia_SizeValue numberOfBytes
)
Parameters
Arcadia_Thread object.numberOfBytes Bytes.bytes Bytes.Return value
A pointer to the file path.
Arcadi_FilePath_parseUnix
Arcadia_FilePath*
Arcadia_FilePath_parseUnix
(
Arcadia_Thread* thread,
void const* bytes,
Arcadia_SizeValue numberOfBytes
)
Parameters
Arcadia_Thread object.numberOfBytes Bytes.bytes Bytes.Return value
A pointer to the file path.
Arcadia_FilePath_parseWindows
Arcadia_FilePath*
Arcadia_FilePath_parseWindows
(
Arcadia_Thread* thread,
void const* bytes,
Arcadia_SizeValue numberOfBytes
)
Parameters
Arcadia_Thread object.numberOfBytes Bytes.bytes Bytes.Return value
A pointer to the file path.
Arcadia_FilePath_toNative
Arcadia_String*
Arcadia_FilePath_toNative
(
Arcadia_Thread* thread,
Arcadia_FilePath* self
)
Parameters
Arcadia_Thread object.Return value
A pointer to the string.
Arcadia_FileSystem
Arcadia_FileSystem extends Arcadia_Object.
Arcadia_FileSystem provides access to the file system.
Arcadia_FileSystem_createDirectoryIterator
Arcadia_DirectoryIterator*br>
Arcadia_FileSystem_createDirectoryIterator
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the directory iterator.
Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_createFileHandle
Arcadia_FileHandle*
Arcadia_FileSystem_createFileHandle
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the file handle.
Errors
self is a null pointer.Arcadia_FileSystem_deleteDirectoryFile
void
Arcadia_FileSystem_deleteDirectoryFile
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_deleteFile
void
Arcadia_FileSystem_deleteFile
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Errors
self is a null pointer.self is a null pointer.path is a null pointer.Arcadia_FileSystem_deleteRegularFile
void
Arcadia_FileSystem_deleteRegularFile
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_directoryFileExists
Arcadia_BooleanValue
Arcadia_FileSystem_directoryFileExists
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
Arcadia_BooleanValue_True if the file exists and is a directory file.
Arcadia_BooleanValue_False otherwise.
Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_getConfigurationDirectory
Arcadia_FilePath*
Arcadia_FileSystem_getConfigurationDirectory
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self
)
- Windows:
C:\Users\<Username>\AppData\Local\<Organization Name>\<Game Name> - Linux:
<Home>\<Organization Name>\<Game Name>
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the the path of the "configuration" directory.
Errors
self is a null pointer.Arcadia_FileSystem_getFileContents
Arcadia_ByteBuffer*
Arcadia_FileSystem_getFileContents
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to a Arcadia_ByteBuffer object with the file contents.
Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_getOrCreate
Arcadia_FileSystem*
Arcadia_FileSystem_getOrCreate
(
Arcadia_Thread* thread
)
Parameters
Arcadia_Thread object.Errors
Return value
A pointer to a Arcadia_FileSystem object.
Arcadia_FileSystem_getSaveDirectory
Arcadia_FilePath*
Arcadia_FileSystem_getSaveDirectory
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self
)
- Windows:
C:\Users\<Username>\AppData\Roaming\<Organization Name>\<Game Name> - Linux:
<Home>\<Organization Name>\<Game Name>
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the the path of the "save" directory.
Errors
self is a null pointer.Arcadia_FileSystem_getWorkingDirectory
Arcadia_FilePath*
Arcadia_FileSystem_getWorkingDirectory
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
A pointer to the path of the working directory.
Errors
self is a null pointer.Arcadia_FileSystem_regularFileExists
Arcadia_BooleanValue
Arcadia_FileSystem_regularFileExists
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Return value
Arcadia_BooleanValue_True if the file exists and is a regular file.
Arcadia_BooleanValue_False otherwise.
Errors
self is a null pointer.path is a null pointer.Arcadia_FileSystem_setFileContents
void
Arcadia_FileSystem_setFileContents
(
Arcadia_Thread* thread,
Arcadia_FileSystem* self,
Arcadia_FilePath* path,
Arcadia_ByteBuffer* contents
)
Parameters
Arcadia_Thread object.Arcadia_FileSystem object.Errors
self is a null pointer.path is a null pointer.contents is a null pointer.Arcadia_FileType
typedef enum Arcadia_FileType Arcadia_FileType;
Elements
Arcadia_FileType_UnknownArcadia_FileType_RegularArcadia_FileType_DirectoryArcadia_NonExistingFilePolicy
typedef enum Arcadia_NonExistingFilePolicy Arcadia_NonExistingFilePolicy;
Elements
Arcadia_NonExistingFilePolicy_FailArcadia_NonExistingFilePolicy_Create