From b40ecc5bb19cfb45b04aebf57f7e94dccc72e299 Mon Sep 17 00:00:00 2001 From: FantasyPvP <80643031+FantasyPvP@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:32:36 +0000 Subject: [PATCH] fixed some bugs in c versiosn --- .vscode/tasks.json | 28 ++++++++++++++ final/binary | Bin 17400 -> 29264 bytes final/dynstr.c | 88 ++++++++++++++++++------------------------ final/dynstr.h | 28 +++++++------- final/editor.c | 25 +++++++++--- final/editor.h | 4 +- final/main.c | 21 +++++++++- final/util.c | 4 ++ prototype/src/main.rs | 14 ++++++- 9 files changed, 136 insertions(+), 76 deletions(-) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..08d9005 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc build active file", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/final/binary b/final/binary index 8b4cb0a244bd5cac073c2a12c63c2c164404fbb8..9e656ce77d1122b4dfc9b889ea2e897e8cfabeb9 100755 GIT binary patch literal 29264 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 literal 17400 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 #include #include +#include typedef struct { - int size; - int capacity; + uint32_t size, capacity; char* data; -} String; +} String_t; -String str_with_capacity(int capacity) { - String s; +String_t str_with_capacity(int capacity) { + String_t s; /// allocate memory for 'capacity' chars s.data = (char*)calloc(capacity, sizeof(char)); @@ -24,8 +24,8 @@ String str_with_capacity(int capacity) { return s; } -String str_from_chars(char* string) { - String s; +String_t str_from_chars(const char* string) { + String_t s; s.data = (char*)calloc(strlen(string), sizeof(char)); strcpy(s.data, string); @@ -34,8 +34,8 @@ String str_from_chars(char* string) { return s; } -String str_from_slice(char* string, int len) { - String s; +String_t str_from_slice(const char* string, int len) { + String_t s; s.data = (char*)calloc(len, sizeof(char)); strncpy(s.data, string, len); @@ -44,22 +44,21 @@ String str_from_slice(char* string, int len) { return s; } - -String str_new() { +String_t str_new() { return str_with_capacity(1); } -int str_dealloc(String* self) { +int str_dealloc(String_t* self) { free(self->data); return 0; } -void str_push(String* self, char c) { +int str_push(String_t* self, char c) { // check size < capacity if (self->size < self->capacity) { self->data[self->size] = c; self->size++; - return; + return 0; } // reallocate to add capacity for an extra char @@ -68,10 +67,10 @@ void str_push(String* self, char c) { self->data[self->size] = c; self->size++; self->capacity = newcap; - return; + return 0; } -char str_pop(String* self) { +char str_pop(String_t* self) { if (self->size == 0) { return '\0'; } @@ -80,31 +79,33 @@ char str_pop(String* self) { return c; } -void str_insert(String* self, int index, char c) { +int str_insert(String_t* self, int index, char c) { if (index > self->size) { - return; + return -1; } self->size++; for (int i = self->size - 1; i > index; i--) { self->data[i] = self->data[i - 1]; } self->data[index] = c; + return 0; } -void str_remove(String* self, int index) { +int str_remove(String_t* self, int index) { if (index >= self->size) { - return; + return -1; } self->size--; for (int i = index; i < self->size; i++) { self->data[i] = self->data[i + 1]; } + return 0; } -String* str_lines(String* self, int* numlines) { +String_t* str_lines(String_t* self, int* numlines) { char* string = self->data; - String* lines = NULL; + String_t* lines = NULL; // find the number of lines in the file *numlines = 0; @@ -121,7 +122,7 @@ String* str_lines(String* self, int* numlines) { } // allocate memory for an array of pointers to each line - lines = (String*)malloc((*numlines + 1) * sizeof(String)); + lines = (String_t*)malloc((*numlines + 1) * sizeof(String_t)); int i = 0; char* start = string; @@ -139,15 +140,15 @@ String* str_lines(String* self, int* numlines) { end++; } } - // returns an array of String + // returns an array of String_t return lines; } /// splits a string into an array of strings based on a delimiter -String* str_split(String* self, int* res_len, char c) { +String_t* str_split(String_t* self, int* res_len, char c) { char* string = self->data; - String* elements = NULL; + String_t* elements = NULL; // find the number of lines in the file @@ -168,7 +169,7 @@ String* str_split(String* self, int* res_len, char c) { } // allocate memory for an array of pointers to each line - elements = (String*)malloc((*res_len) * sizeof(String)); + elements = (String_t*)malloc((*res_len) * sizeof(String_t)); int i = 0; flag = false; @@ -193,40 +194,27 @@ String* str_split(String* self, int* res_len, char c) { } - // returns an array of String + // returns an array of String_t return elements; } -int str_len(String* s) { +int str_len(String_t* s) { return s->size; } -char* to_chars(String* s) { +char* to_chars(String_t* s) { return s->data; } // int main() { -// String s = str_from_chars("hello\nworld\neeeee\notherline\n\0"); +// String_t s = str_from_chars("hello\nworld\neeeee\notherline\n\0"); + +// str_remove(&s, 10); +// str_insert(&s, 10, 'h'); + +// printf("%s\n", to_chars(&s)); -// int numlines = 0; -// String* lns = str_lines(&s, &numlines); // str_dealloc(&s); -// for (int i = 0; i < numlines; i++) { -// printf("%s\n", lns[i].data); -// str_dealloc(&lns[i]); -// } - -// String s2 = str_from_chars("$this$needs$to$be$split"); - -// int elements = 0; -// String* split = str_split(&s2, &elements, '$'); -// str_dealloc(&s2); - -// printf("%d elements\n", elements); -// for (int i = 0; i < elements; i++) { -// printf("%s\n", split[i].data); -// str_dealloc(&split[i]); -// printf("(dealloced)\n"); -// } +// return 0; // } \ No newline at end of file diff --git a/final/dynstr.h b/final/dynstr.h index 0391223..6f86e5b 100644 --- a/final/dynstr.h +++ b/final/dynstr.h @@ -5,32 +5,32 @@ typedef struct { int size; int capacity; char* data; -} String; +} String_t; -String str_with_capacity(int capacity); +String_t str_with_capacity(int capacity); -String str_from_chars(char* string); +String_t str_from_chars(char* string); -String str_from_slice(char* string, int len); +String_t str_from_slice(char* string, int len); -String str_new(); +String_t str_new(); -String* str_lines(String* self, int* numlines); +String_t* str_lines(String_t* self, int* numlines); -// String* str_split(String* self, int* res_len, char c); +// String_t* str_split(String_t* self, int* res_len, char c); -void str_push(String* s, char c); +void str_push(String_t* s, char c); -char str_pop(String* s); +char str_pop(String_t* s); -void str_insert(String* s, int index, char c); +void str_insert(String_t* s, int index, char c); -void str_remove(String* s, int index); +void str_remove(String_t* s, int index); -int str_dealloc(String* s); +int str_dealloc(String_t* s); -char* to_chars(String* s); +char* to_chars(String_t* s); -int str_len(String* s); +int str_len(String_t* s); #endif diff --git a/final/editor.c b/final/editor.c index f90b417..7a91c46 100644 --- a/final/editor.c +++ b/final/editor.c @@ -9,7 +9,7 @@ typedef struct { int screen_line; int screen_col; bool editmode; - String* buffer; + String_t* buffer; } Editor; Editor new_editor() { @@ -18,7 +18,13 @@ Editor new_editor() { e.screen_line = 0; e.screen_col = 0; e.editmode = false; - e.buffer = NULL; + + String_t lines = str_from_chars(""); + e.buffer = str_lines(&lines, &e.lines); + str_dealloc(&lines); + + addstr(""); + return e; } @@ -29,12 +35,18 @@ Editor editor_from(char* input_string) { e.screen_line = 0; e.screen_col = 0; e.editmode = false; - e.buffer = NULL; + + String_t lines = str_from_chars(input_string); + e.buffer = str_lines(&lines, &e.lines); + str_dealloc(&lines); + + addstr(input_string); + return e; } void move_cursor(Editor* self, int x, int y) { - if (x != 0 + if (y != 0 && self->screen_line + y >= 0 && self->screen_line + y <= self->lines) { @@ -45,6 +57,7 @@ void move_cursor(Editor* self, int x, int y) { } } else if (self->screen_col + x < 0) { if (self->screen_line - 1 >= 0) { + self->screen_line -= 1; self->screen_col = str_len(&self->buffer[self->screen_line]); } } else if (self->screen_col + x > str_len(&self->buffer[self->screen_line])) { @@ -70,13 +83,13 @@ void addchar(Editor* self, char c) { if (self->screen_line == self->lines) { // reallocate self->buffer to be 1 larger self->lines++; - self->buffer = realloc(self->buffer, sizeof(String) * (self->lines + 1)); + self->buffer = realloc(self->buffer, sizeof(String_t) * (self->lines + 1)); } str_insert(&self->buffer[self->screen_line], self->screen_col, c); move_cursor(self, 1, 0); } -String* to_string(Editor* self) { +String_t* to_string(Editor* self) { } diff --git a/final/editor.h b/final/editor.h index ec45b4b..5e678dd 100644 --- a/final/editor.h +++ b/final/editor.h @@ -4,7 +4,7 @@ typedef struct { int screen_line; int screen_col; bool editmode; - String* buffer; + String_t* buffer; } Editor; Editor new_editor(); @@ -15,4 +15,4 @@ void move_cursor(Editor* self, int x, int y); void delchar(Editor* self); void addchar(Editor* self, char c); -String* to_string(Editor* self); \ No newline at end of file +String_t* to_string(Editor* self); \ No newline at end of file diff --git a/final/main.c b/final/main.c index 865c133..0111961 100644 --- a/final/main.c +++ b/final/main.c @@ -24,7 +24,7 @@ int open_editor() { move(0, 0); - Editor editor = new_editor(); + Editor editor = editor_from("this is some text to edit\nthis is the second line\nand this is the third lol"); while (true) { refresh(); @@ -35,10 +35,26 @@ int open_editor() { editor.editmode = false; break; case KEY_BACKSPACE: + delchar(&editor); + move_cursor(&editor, -1, 0); + break; + case KEY_DC: delchar(&editor); break; case KEY_ENTER: - editor.editmode = false; + //TODO: next line + break; + case KEY_UP: + move_cursor(&editor, 0, -1); + break; + case KEY_DOWN: + move_cursor(&editor, 0, 1); + break; + case KEY_LEFT: + move_cursor(&editor, -1, 0); + break; + case KEY_RIGHT: + move_cursor(&editor, 1, 0); break; default: addchar(&editor, c); @@ -47,6 +63,7 @@ int open_editor() { } else { switch (c) { case 'q': + endwin(); return 0; case 'i': editor.editmode = true; diff --git a/final/util.c b/final/util.c index e69de29..fd40910 100644 --- a/final/util.c +++ b/final/util.c @@ -0,0 +1,4 @@ + + + + diff --git a/prototype/src/main.rs b/prototype/src/main.rs index 51ed803..281db9b 100644 --- a/prototype/src/main.rs +++ b/prototype/src/main.rs @@ -7,6 +7,16 @@ use std::{ io::Write, }; + +fn somefunc() { + let c = "hello"; + + println!("{}", c); + + let c2 = String::from("hello world"); +} + + struct EditorData { buffer: Vec>, // outer vec is the line, inner is col; file_line: i32, @@ -92,14 +102,14 @@ impl EditorData { /// Insert a character at the cursor, /// then update the cursor position. fn addchar(&mut self, c: char) { - ncurses::insch(keystroke as u32); + ncurses::insch(c as u32); if let Some(line) = self.buffer.get_mut(self.screen_line as usize) { line.insert(self.screen_col as usize, c); } else { self.buffer.push(Vec::new()); self.buffer.get_mut(self.screen_line as usize).unwrap().push(c); } - data.mv_cursor(0, 1); + self.mv_cursor(0, 1); } }