diff options
Diffstat (limited to 'include/file.h')
-rw-r--r-- | include/file.h | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/include/file.h b/include/file.h index b30b932c9abb..30a0d9011c00 100644 --- a/include/file.h +++ b/include/file.h @@ -38,18 +38,34 @@ #include <stdarg.h> +#include <history.h> #include <vector.h> #define BC_FILE_ULL_LENGTH (21) +#if BC_ENABLE_LINE_LIB + +#include <stdio.h> + /// The file struct. -typedef struct BcFile { +typedef struct BcFile +{ + // The file. This is here simply to make the line lib code as compatible + // with the existing code as possible. + FILE* f; + +} BcFile; +#else // BC_ENABLE_LINE_LIB + +/// The file struct. +typedef struct BcFile +{ // The actual file descriptor. int fd; // The buffer for the file. - char *buf; + char* buf; // The length (number of actual chars) in the buffer. size_t len; @@ -59,13 +75,15 @@ typedef struct BcFile { } BcFile; -#if BC_ENABLE_HISTORY +#endif // BC_ENABLE_LINE_LIB + +#if BC_ENABLE_HISTORY && !BC_ENABLE_LINE_LIB /// Types of flushing. These are important because of history and printing /// strings without newlines, something that users could use as their own /// prompts. -typedef enum BcFlushType { - +typedef enum BcFlushType +{ /// Do not clear the stored partial line, but don't add to it. BC_FLUSH_NO_EXTRAS_NO_CLEAR, @@ -80,10 +98,10 @@ typedef enum BcFlushType { } BcFlushType; -#else // BC_ENABLE_HISTORY +#else // BC_ENABLE_HISTORY && !BC_ENABLE_LINE_LIB // These make sure that the BcFlushType parameter disappears if history is not -// used. +// used, editline is used, or readline is used. #define bc_file_putchar(f, t, c) bc_file_putchar(f, c) #define bc_file_flushErr(f, t) bc_file_flushErr(f) @@ -91,7 +109,19 @@ typedef enum BcFlushType { #define bc_file_write(f, t, b, n) bc_file_write(f, b, n) #define bc_file_puts(f, t, s) bc_file_puts(f, s) -#endif // BC_ENABLE_HISTORY +#endif // BC_ENABLE_HISTORY && !BC_ENABLE_LINE_LIB + +#if BC_ENABLE_LINE_LIB + +/** + * Initialize a file. + * @param f The file to initialize. + * @param file The stdio file. + */ +void +bc_file_init(BcFile* f, FILE* file); + +#else // BC_ENABLE_LINE_LIB /** * Initialize a file. @@ -100,13 +130,17 @@ typedef enum BcFlushType { * @param buf The buffer for the file. * @param cap The capacity of the buffer. */ -void bc_file_init(BcFile *f, int fd, char *buf, size_t cap); +void +bc_file_init(BcFile* f, int fd, char* buf, size_t cap); + +#endif // BC_ENABLE_LINE_LIB /** * Frees a file, including flushing it. * @param f The file to free. */ -void bc_file_free(BcFile *f); +void +bc_file_free(BcFile* f); /** * Print a char into the file. @@ -114,7 +148,8 @@ void bc_file_free(BcFile *f); * @param type The flush type. * @param c The character to write. */ -void bc_file_putchar(BcFile *restrict f, BcFlushType type, uchar c); +void +bc_file_putchar(BcFile* restrict f, BcFlushType type, uchar c); /** * Flush and return an error if it failed. This is meant to be used when needing @@ -124,14 +159,16 @@ void bc_file_putchar(BcFile *restrict f, BcFlushType type, uchar c); * @param type The flush type. * @return A status indicating if an error occurred. */ -BcStatus bc_file_flushErr(BcFile *restrict f, BcFlushType type); +BcStatus +bc_file_flushErr(BcFile* restrict f, BcFlushType type); /** * Flush and throw an error on failure. * @param f The file to flush. * @param type The flush type. */ -void bc_file_flush(BcFile *restrict f, BcFlushType type); +void +bc_file_flush(BcFile* restrict f, BcFlushType type); /** * Write the contents of buf to the file. @@ -140,22 +177,24 @@ void bc_file_flush(BcFile *restrict f, BcFlushType type); * @param buf The buffer whose contents will be written to the file. * @param n The length of buf. */ -void bc_file_write(BcFile *restrict f, BcFlushType type, - const char *buf, size_t n); +void +bc_file_write(BcFile* restrict f, BcFlushType type, const char* buf, size_t n); /** * Write to the file like fprintf would. This is very rudimentary. * @param f The file to flush. * @param fmt The format string. */ -void bc_file_printf(BcFile *restrict f, const char *fmt, ...); +void +bc_file_printf(BcFile* restrict f, const char* fmt, ...); /** * Write to the file like vfprintf would. This is very rudimentary. * @param f The file to flush. * @param fmt The format string. */ -void bc_file_vprintf(BcFile *restrict f, const char *fmt, va_list args); +void +bc_file_vprintf(BcFile* restrict f, const char* fmt, va_list args); /** * Write str to the file. @@ -163,15 +202,16 @@ void bc_file_vprintf(BcFile *restrict f, const char *fmt, va_list args); * @param type The flush type. * @param str The string to write to the file. */ -void bc_file_puts(BcFile *restrict f, BcFlushType type, const char *str); +void +bc_file_puts(BcFile* restrict f, BcFlushType type, const char* str); -#if BC_ENABLE_HISTORY +#if BC_ENABLE_HISTORY && !BC_ENABLE_LINE_LIB // Some constant flush types for ease of use. extern const BcFlushType bc_flush_none; extern const BcFlushType bc_flush_err; extern const BcFlushType bc_flush_save; -#endif // BC_ENABLE_HISTORY +#endif // BC_ENABLE_HISTORY && !BC_ENABLE_LINE_LIB #endif // BC_FILE_H |