From b41a06dceaa2b4432900db98c49e55118b77fdef Mon Sep 17 00:00:00 2001 From: thing1 Date: Fri, 20 Sep 2024 17:56:55 +0100 Subject: pushed alot to the stdlib --- comp/lucas-standen-NEA/code2/stdlib/Makefile | 17 +++ .../lucas-standen-NEA/code2/stdlib/String/Makefile | 7 ++ .../lucas-standen-NEA/code2/stdlib/String/String.c | 137 +++++++++++++++++++++ .../lucas-standen-NEA/code2/stdlib/String/String.h | 27 ++++ comp/lucas-standen-NEA/code2/stdlib/zpylib.c | 40 ++++++ comp/lucas-standen-NEA/code2/stdlib/zpylib.h | 9 ++ 6 files changed, 237 insertions(+) create mode 100644 comp/lucas-standen-NEA/code2/stdlib/Makefile create mode 100644 comp/lucas-standen-NEA/code2/stdlib/String/Makefile create mode 100644 comp/lucas-standen-NEA/code2/stdlib/String/String.c create mode 100644 comp/lucas-standen-NEA/code2/stdlib/String/String.h create mode 100644 comp/lucas-standen-NEA/code2/stdlib/zpylib.c create mode 100644 comp/lucas-standen-NEA/code2/stdlib/zpylib.h (limited to 'comp/lucas-standen-NEA/code2/stdlib') diff --git a/comp/lucas-standen-NEA/code2/stdlib/Makefile b/comp/lucas-standen-NEA/code2/stdlib/Makefile new file mode 100644 index 0000000..d915d38 --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/Makefile @@ -0,0 +1,17 @@ +CC=cc +CLFAGS=-O0 -ggdb + +stdlib: + cd String && make + ${CC} *.c -c ${CFLAGS} + +clean: + rm -rf *.o + cd String && make clean + +install: + cp *.o /usr/local/share/zpylib/ + cp *.h /usr/local/share/zpylib/include/ + cp String/String.o /usr/local/share/zpylib + cp String/String.h /usr/local/share/zpylib/include + diff --git a/comp/lucas-standen-NEA/code2/stdlib/String/Makefile b/comp/lucas-standen-NEA/code2/stdlib/String/Makefile new file mode 100644 index 0000000..e61ca1d --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/String/Makefile @@ -0,0 +1,7 @@ +CC=cc +CFLAGS=-ggdb + +all: String.c + ${CC} String.c -c -o String.o ${CFLAGS} +clean: + rm -rf String.o diff --git a/comp/lucas-standen-NEA/code2/stdlib/String/String.c b/comp/lucas-standen-NEA/code2/stdlib/String/String.c new file mode 100644 index 0000000..2814a1c --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/String/String.c @@ -0,0 +1,137 @@ +#include +#include +#include + +#include "String.h" + +size_t STRINGSPLITCOUNT = 0; + +void __stringfree(string *self){ + free(self->_str); + free(self); +} + +void __stringappendchar(string *self, char c){ + self->_len++; + self->_str = realloc(self->_str, self->_len); + self->_str[self->_len-1] = c; +} + +int __stringinsert(string *self, string *substring, size_t point){ + if (point > self->_len) return 1; + + size_t len = self->_len + substring->_len; + + char *start = malloc(point); + char *end = malloc(self->_len - point); + + int i; + for (i = 0; i < point; i++){ + start[i] = self->_str[i]; + } + + int j = 0; + for (; i < self->_len; i++){ + end[j] = self->_str[i]; + j++; + } + + self->_str = realloc(self->_str, len); + + for (i = 0; i < strlen(start); i++){ + self->_str[i] = start[i]; + } + j = 0; + for (; j < substring->_len; i++){ + self->_str[i] = substring->_str[j]; + j++; + } + j = 0; + for (; i < len; i++){ + self->_str[i] = end[j]; + j++; + } + + self->_len = len; + free(start); + free(end); + + return 0; +} + +void __stringreplacechar(string *self, char orig, char new){ + for (int i = 0; i < self->_len; i++) + if (self->_str[i] == orig) self->_str[i] = new; +} + +int __stringcountchar(string *self, char c){ + int count = 0; + for (int i = 0; i < self->_len; i++) + if (self->_str[i] == c) count++; + + return count; +} + +int __stringcmp(string *str1, string *str2){ + return strcmp(str1->_str, str2->_str); +} + +void __stringfromcstring(string *self, char *cstring){ + size_t len = strlen(cstring); + + self->_str = realloc(self->_str, len); + + memcpy(self->_str, cstring, len); + + self->_len = len; +} + +char *__stringtocstring(string *self){ + char *cstring = malloc(self->_len + 1); + memcpy(cstring, self->_str, self->_len); + cstring[self->_len + 1] = '\0'; + return cstring; +} + +string **__stringsplit(string *self, char delim){ + int splitcount = self->countchar(self, delim) + 1; + string **strs = malloc(sizeof(string **)); + + int j = 0; + for (int i = 0; i < splitcount; i++){ + char *str = calloc(0, self->_len); + int charcount = 0; + for (; self->_str[j] != delim && j < self->_len; j++){ + str[charcount] = self->_str[j]; + charcount++; + } + j++; + str[charcount+1] = '\0'; + strs[i] = String(str); + free(str); + } + + STRINGSPLITCOUNT = splitcount; + return strs; +} + +string *String(char *cstring){ // returns an allocated String from a C string input + size_t len = strlen(cstring); + string *str = malloc(sizeof(string)); + + str->_str = calloc(0, len); + memcpy(str->_str, cstring, len); + str->_len = len; + + str->free = &__stringfree; + str->appendchar = &__stringappendchar; + str->insert = &__stringinsert; + str->replacechar = &__stringreplacechar; + str->countchar = &__stringcountchar; + str->cmp = &__stringcmp; + str->fromcstring = &__stringfromcstring; + str->tocstring = &__stringtocstring; + str->split = &__stringsplit; + + return str; +} diff --git a/comp/lucas-standen-NEA/code2/stdlib/String/String.h b/comp/lucas-standen-NEA/code2/stdlib/String/String.h new file mode 100644 index 0000000..865defe --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/String/String.h @@ -0,0 +1,27 @@ +#include +extern size_t STRINGSPLITCOUNT; +typedef struct string string; +typedef struct string { + char *_str; // not null terminated string, length encoded + size_t _len; + void (*free)(string*); + void (*appendchar)(string *, char); + int (*insert)(string *, string *, size_t); + void (*replacechar)(string *, char, char); + int (*countchar)(string *, char); + int (*cmp)(string *, string*); + void (*fromcstring)(string *, char *); + char *(*tocstring)(string *); + string **(*split)(string *, char); +} string; + +string *String(char *cstring); +void __stringfree(string *self); +void __stringappendchar(string *self, char c); +int __stringinsert(string *self, string *substring, size_t point); +void __stringreplacechar(string *self, char orig, char new); +int __stringcountchar(string *self, char c); +int __stringcmp(string *str1, string *str2); +void __stringfromcstring(string *self, char *cstring); +char *__stringtocstring(string *self); +string **__stringsplit(string *self, char delim); diff --git a/comp/lucas-standen-NEA/code2/stdlib/zpylib.c b/comp/lucas-standen-NEA/code2/stdlib/zpylib.c new file mode 100644 index 0000000..11b6a88 --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/zpylib.c @@ -0,0 +1,40 @@ +#include +#include +#include + +#include "./String/String.h" + +void printchar(char c){ + putchar(c); +} + +void printint(int i){ + printf("%d", i); +} + +void printfloat(double f){ + printf("%f", f); +} + +char readchar(){ + char c; + scanf("%c", &c); + return c; +} + +int readint(){ + int i; + scanf("%d", &i); + return i; +} + +double readfloat(){ + double f; + scanf("%lf", &f); + return f; +} + +int randint(int lower, int upper){ + srand(time(NULL)); + return rand() % (((upper + 1) - lower) + lower); +} diff --git a/comp/lucas-standen-NEA/code2/stdlib/zpylib.h b/comp/lucas-standen-NEA/code2/stdlib/zpylib.h new file mode 100644 index 0000000..d86dc2d --- /dev/null +++ b/comp/lucas-standen-NEA/code2/stdlib/zpylib.h @@ -0,0 +1,9 @@ +#include +#include + +void printstr(char *str); +void printint(int i); +void printfloat(double f); +int readint(); +void readfloat(double f); +int randint(int lower, int upper); -- cgit v1.2.3