From 554d8d3925258d78658f1f541be34dea3bdbda57 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 5 May 2020 16:41:12 -0500 Subject: [PATCH] Starting to work on files --- Makefile | 5 +- bh.h | 121 +++++++++++++++++++++++------------ onyx | Bin 22944 -> 22800 bytes onyx.c | 35 ++++++---- demo.onyx => progs/demo.onyx | 0 5 files changed, 106 insertions(+), 55 deletions(-) rename demo.onyx => progs/demo.onyx (100%) diff --git a/Makefile b/Makefile index 1df1e52e..2f544b46 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,13 @@ INCLUDES= LIBS= FLAGS=-g -%.o: %.c +%.o: %.c bh.h $(CC) $(FLAGS) -c $< -o $@ $(INCLUDES) onyx: $(OBJ_FILES) $(CC) $(FLAGS) $< -o $@ $(LIBS) +clean: + rm $(OBJ_FILES) 2>&1 >/dev/null + all: onyx clean diff --git a/bh.h b/bh.h index a08aad4f..6e4f2d05 100644 --- a/bh.h +++ b/bh.h @@ -62,7 +62,7 @@ void bh_string_append_cstr(bh_string* str1, const char* str2); void bh_string_replace_at_bh_string(bh_string* dest, bh_string* src, u64 offset); void bh_string_replace_at_cstr(bh_string* dest, const char* src, u64 offset); void bh_string_insert_at_bh_string(bh_string* dest, bh_string* src, u64 offset); -void bh_string_insert_at_cstr(bh_string* dest, bh_string* src, u64 offset); +void bh_string_insert_at_cstr(bh_string* dest, const char* src, u64 offset); void bh_string_trim_end(bh_string* str, const char* charset); void bh_string_trim_begin(bh_string* str, const char* charset); void bh_string_trim_end_space(bh_string* str); @@ -70,6 +70,49 @@ void bh_string_trim_end_space(bh_string* str); void bh_string_print(bh_string* str); +//------------------------------------------------------------------------------------- +// Better files +//------------------------------------------------------------------------------------- + +typedef enum bh_file_error { + BH_FILE_ERROR_NONE +} bh_file_error; + +typedef enum bh_file_mode { + BH_FILE_MODE_READ = 1 << 0, + BH_FILE_MODE_WRITE = 1 << 1, + BH_FILE_MODE_APPEND = 1 << 2, + BH_FILE_MODE_RW = 1 << 3, + + BH_FILE_MODE_MODES = BH_FILE_MODE_READ | BH_FILE_MODE_WRITE | BH_FILE_MODE_APPEND | BH_FILE_MODE_RW +} bh_file_mode; + +typedef enum bh_file_whence { + bh_file_whence_begin = 0, + bh_file_whence_current = 1, + bh_file_whence_end = 2, +} bh_file_whence; + +typedef int bh_file_descriptor; + +typedef struct bh_file { + bh_file_descriptor fd; + char const* filename; +} bh_file; + +typedef enum bh_file_standard { + BH_FILE_STANDARD_INPUT, + BH_FILE_STANDARD_OUTPUT, + BH_FILE_STANDARD_ERROR +} bh_file_standard; + +bh_file_error bh_file_get_standard(bh_file* file, bh_file_standard stand); + +bh_file_error bh_file_create(bh_file* file, char const* filename); +bh_file_error bh_file_open(bh_file* file, char const* filename); +bh_file_error bh_file_open_mode(bh_file* file, bh_file_mode mode, char const* filename); +bh_file_error bh_file_new(bh_file* file, bh_file_descriptor fd, char const* filename); + //------------------------------------------------------------------------------------- // IMPLEMENTATIONS //------------------------------------------------------------------------------------- @@ -151,62 +194,56 @@ void bh_string_replace_at_cstr(bh_string* dest, const char* src, u64 offset) { } void bh_string_insert_at_bh_string(bh_string* dest, bh_string* src, u64 offset) { -} + if (!bh_string_ensure_capacity(dest, dest->length + src->length)) return; -void bh_string_insert_at_cstr(bh_string* dest, bh_string* src, u64 offset) { + memmove(dest->data + offset + src->length, dest->data + offset, dest->length + src->length - offset); + memcpy(dest->data + offset, src->data, src->length); + dest->length += src->length; } -void bh_string_trim_end(bh_string* str, const char* charset) { -} +void bh_string_insert_at_cstr(bh_string* dest, const char* src, u64 offset) { + const int srclen = strlen(src); + if (!bh_string_ensure_capacity(dest, dest->length + srclen)) return; -void bh_string_trim_begin(bh_string* str, const char* charset) { + // TODO: Use something better. This copies to a seperate buffer first + memmove(dest->data + offset + srclen, dest->data + offset, dest->length + srclen - offset); + memcpy(dest->data + offset, src, srclen); + dest->length += srclen; } -void bh_string_trim_end_space(bh_string* str) { -} +static inline u8 charset_contains(const char* charset, char ch) { + while (*charset) { + if (*charset == ch) return *charset; + charset++; + } -// TEMP -void bh_string_print(bh_string* str) { - write(STDOUT_FILENO, str->data, str->capacity); + return 0; } +void bh_string_trim_end(bh_string* str, const char* charset) { + while (charset_contains(charset, str->data[str->length - 1])) + str->length--; +} +void bh_string_trim_begin(bh_string* str, const char* charset) { + u32 off = 0, i; + while (charset_contains(charset, str->data[off])) off++; -//------------------------------------------------------------------------------------- -// Better files -//------------------------------------------------------------------------------------- -typedef struct File { - i32 fd; - u8 open : 1; - const char* path; -} File; - -int file_open(File *f, const char* path, int flags) { - f->fd = open(path, flags, - S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH // +rw-rw-rw - ); - - if (f->fd < 0) - return 1; - - f->open = 1; - f->path = path; - return 0; -} + if (off == 0) return; -int file_close(File* f) { - if (close(f->fd) < 0) { - return errno; + for (i = 0; i < str->length - off; i++) { + str->data[i] = str->data[i + off]; } - f->open = 0; - return 0; + str->length -= off; } -unsigned char file_read_byte(File* f) { - if (!f->open) return 0; +void bh_string_trim_end_space(bh_string* str) { + bh_string_trim_end(str, " \t\n\r"); +} - unsigned char byte; - read(f->fd, &byte, 1); - return byte; +// TEMP +void bh_string_print(bh_string* str) { + write(STDOUT_FILENO, str->data, str->length); } + diff --git a/onyx b/onyx index f41434829deb74d21d276f499cbd68a11df9be1f..7702a58d16b89279edab5528bb390035dcc44b2a 100755 GIT binary patch delta 6502 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 diff --git a/onyx.c b/onyx.c index 615c50ca..2391e03b 100644 --- a/onyx.c +++ b/onyx.c @@ -1,38 +1,49 @@ #include // TODO: Replace with custom lib #include // TODO: Replace with custom lib #include "bh.h" -// +// // int main(int argc, char *argv[]) { // if (argc < 2) { // fprintf(stderr, "Expected file to compile\n"); // return -1; // } -// +// // File file; -// +// // if (file_open(&file, argv[1], O_RDONLY)) { // fprintf(stderr, "Failed to open file: %s\n", argv[1]); // return -1; // } -// +// // file_close(&file); -// +// // return 0; // } -// +// int main(int argc, char *argv[]) { bh_string test_str = bh_string_new(256); - bh_string world_str = bh_string_new("World"); + bh_string world_str = bh_string_new("World FOO Bar test\n"); - bh_string_append(&test_str, "Hello Frank!"); + bh_string_append(&test_str, "Hello Frank!\n"); bh_string_replace_at(&test_str, &world_str, 6); bh_string_replace_at(&test_str, "Hola ", 0); + bh_string_insert_at(&test_str, "World", 3); bh_string_print(&test_str); + bh_string trim_str = bh_string_new("abcdeTesting words herezzzz\n \t"); + bh_string_print(&trim_str); + bh_string_trim_begin(&trim_str, "abcde"); + bh_string_print(&trim_str); + bh_string_trim_end_space(&trim_str); + bh_string_print(&trim_str); + bh_string_delete(&test_str); bh_string_delete(&world_str); - + bh_string_delete(&trim_str); + + // bh_string file_contents = bh_file_read_contents("path"); + return 0; } @@ -42,11 +53,11 @@ int main(int argc, char *argv[]) { // fseek(file, 0, SEEK_END); // long end = ftell(file); // fseek(file, 0, SEEK_SET); -// -// +// +// // char* data = (char *) malloc(sizeof(u8) * (end - start + 1)); // read(file->, data, end - start); // fclose(file); // printf("%ld - %ld = %ld\n", end, start, end - start); // printf("%s", data); -// } \ No newline at end of file +// } diff --git a/demo.onyx b/progs/demo.onyx similarity index 100% rename from demo.onyx rename to progs/demo.onyx -- 2.25.1