start of a major rewrite
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
#include <curses.h>
|
||||
#ifndef BACKEND_GUARD
|
||||
#define BACKEND_GUARD
|
||||
#include "defines.h"
|
||||
|
||||
#define SETTINGS_COMMAND_REPLACE_STR "%"
|
||||
|
||||
typedef struct String {
|
||||
char *data;
|
||||
size_t size;
|
||||
} string;
|
||||
|
||||
#define s(str) { \
|
||||
return (string) { \
|
||||
.data = str; \
|
||||
.size = strlen(str); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define concat(out, s1, s2, _free) { \
|
||||
concat## _free(out, s1, s2); \
|
||||
}
|
||||
|
||||
#define concat0(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
out = result;
|
||||
|
||||
|
||||
#define concat1(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s1); \
|
||||
out = result;
|
||||
|
||||
#define concat2(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s2); \
|
||||
out = result;
|
||||
|
||||
#define concat3(out, s1, s2) \
|
||||
char *result = malloc(strlen(s1) + strlen(s2) + 1); \
|
||||
memcpy(result, s1, strlen(s1)); \
|
||||
memcpy(result + strlen(s1), s2, strlen(s2) + 1); \
|
||||
free(s1); \
|
||||
free(s2); \
|
||||
out = result;
|
||||
|
||||
/*
|
||||
int s_strcmp(const char *s0, char string *s1) {
|
||||
size_t size = s1->size - s0->size;
|
||||
if (size) {
|
||||
return size;
|
||||
}
|
||||
size = s0.size;
|
||||
while (*s0->data == *s0->data && size) {
|
||||
s0->data += 1;
|
||||
s1->data += 1;
|
||||
size--;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
*/
|
||||
char* smartstrcasestr(const char *haystack, const char *needle){
|
||||
char smart = 0;
|
||||
char *ret;
|
||||
char passes = 0;
|
||||
while (*needle) {
|
||||
if (*needle >= 'A' && *needle <= 'Z') {
|
||||
smart = 1;
|
||||
break;
|
||||
}
|
||||
passes++;
|
||||
needle++;
|
||||
}
|
||||
needle -= passes;
|
||||
if (smart == 0) {
|
||||
char *needle_case = malloc(strlen(needle)+1);
|
||||
memcpy(needle_case, needle, strlen(needle)+1);
|
||||
passes = 0;
|
||||
while (*needle_case) {
|
||||
*needle_case = *needle_case | ' ';
|
||||
needle_case++;
|
||||
passes++;
|
||||
}
|
||||
needle_case -= passes;
|
||||
|
||||
char *haystack_case = malloc(strlen(haystack)+1);
|
||||
memcpy(haystack_case, haystack, strlen(haystack)+1);
|
||||
passes = 0;
|
||||
while (*haystack_case) {
|
||||
*haystack_case = *haystack_case | ' ';
|
||||
haystack_case++;
|
||||
passes++;
|
||||
}
|
||||
haystack_case -= passes;
|
||||
|
||||
ret = strstr(haystack_case, needle_case);
|
||||
free(needle_case);
|
||||
free(haystack_case);
|
||||
} else {
|
||||
ret = strstr(haystack, needle);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*char* concat(const char *s1, const char *s2);*/
|
||||
char* smartstrcasestr(const char *haystack, const char *needle);
|
||||
Reference in New Issue
Block a user