summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code2/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'comp/lucas-standen-NEA/code2/stdlib')
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/Makefile17
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/String/Makefile7
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/String/String.c137
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/String/String.h27
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/zpylib.c40
-rw-r--r--comp/lucas-standen-NEA/code2/stdlib/zpylib.h9
6 files changed, 237 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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 <stddef.h>
+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 <stdlib.h>
+#include <time.h>
+#include <stdio.h>
+
+#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 <String.h>
+#include <stddef.h>
+
+void printstr(char *str);
+void printint(int i);
+void printfloat(double f);
+int readint();
+void readfloat(double f);
+int randint(int lower, int upper);