From 06d266e42517055d359b4eec5313d0cebc207cdf Mon Sep 17 00:00:00 2001 From: Robin Jones Date: Sat, 7 Oct 2017 23:40:09 +0100 Subject: [PATCH] organised string functions --- inc/fat.h | 4 -- inc/main.h | 1 - inc/strlib.h | 13 ++++++ inc/sys.h | 5 --- src/fat.c | 2 +- src/strlib.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/sys.c | 109 -------------------------------------------------- 7 files changed, 123 insertions(+), 121 deletions(-) diff --git a/inc/fat.h b/inc/fat.h index 86bd07e..1a76622 100644 --- a/inc/fat.h +++ b/inc/fat.h @@ -118,10 +118,6 @@ u8 fatCreateRecIfNotExist(u8 *name, u8 is_dir); u8 fatGetFullName(u8 *name, u32 dir_entry, u32 rec_entry); u8 fatOpenDirByName(u8 *name); void fatInitRam(); - -u8 streq(u8 *str1, u8 *str2); -u8 streql(u8 *str1, u8 *str2, u8 len); -u8 slen(u8 *str); void fatSortRecords(); #endif /* _FAT_H */ diff --git a/inc/main.h b/inc/main.h index 40791be..3357f8d 100644 --- a/inc/main.h +++ b/inc/main.h @@ -5,7 +5,6 @@ // //protos maybe some aren't necessary any longer -void strhicase(u8 *str, u8 len); void PI_DMAWait(void); void evd_writeReg(u8 reg, u16 val); void bootRom(display_context_t disp, int silent); diff --git a/inc/strlib.h b/inc/strlib.h index 0b4b6f3..daeac7a 100644 --- a/inc/strlib.h +++ b/inc/strlib.h @@ -5,6 +5,9 @@ // #ifndef STRLIB_H_ + +#include "types.h" + enum strtrim_mode_t { STRLIB_MODE_ALL = 0, STRLIB_MODE_RIGHT = 0x01, @@ -27,4 +30,14 @@ char *triml(char *s); char *trimr(char *s); char *trim(char *s); char *strlibkill(char *s); + +void strhicase(u8 *str, u8 len); +u16 strcon(u8 *str1, u8 *str2, u8 *dst, u16 max_len); +u8 slen(u8 *str); +u8 scopy(u8 *src, u8 *dst); + +u8 streq(u8 *str1, u8 *str2); +u8 streql(u8 *str1, u8 *str2, u8 len); + +u16 strContain(u8 *target, u8 *str); #endif diff --git a/inc/sys.h b/inc/sys.h index 3fab2eb..14ab3a8 100644 --- a/inc/sys.h +++ b/inc/sys.h @@ -21,11 +21,6 @@ void dma_read_sram(void *dest, u32 offset, u32 size); u8 getSaveType(); u8 getCicType(u8 bios_cic); -u16 strcon(u8 *str1, u8 *str2, u8 *dst, u16 max_len); -u8 slen(u8 *str); -u8 scopy(u8 *src, u8 *dst); - -u16 strContain(u8 *target, u8 *str); typedef struct SP_regs_s { u32 mem_addr; diff --git a/src/fat.c b/src/fat.c index 4fa247b..c5aad7c 100644 --- a/src/fat.c +++ b/src/fat.c @@ -13,6 +13,7 @@ #include "everdrive.h" #include "sys.h" #include +#include "strlib.h" @@ -39,7 +40,6 @@ u8 fatCacheApplyTable(); u8 fatGetFreeRecord(FatRecord *dir_rec, u8 len); void fatMakeLfnBlock(u8 *name, u8 *lfn_block, u8 block_idx, u8 crc); u32 fatSectorToCluster(u32 sector); -void strhicase(u8 *str, u8 len); u8 fatClearClusters(u32 cluster, u8 len); u8 fatReadCluster(void *dst); diff --git a/src/strlib.c b/src/strlib.c index 0ac8fa7..50ea0c8 100644 --- a/src/strlib.c +++ b/src/strlib.c @@ -46,4 +46,112 @@ char *strstrlibkill(char *d, char *s) { return strcpytrim(d, s, STRLIB_MODE_ALL, char *triml(char *s) { return strcpytrim(s, s, STRLIB_MODE_LEFT, 0); } char *trimr(char *s) { return strcpytrim(s, s, STRLIB_MODE_RIGHT, 0); } char *trim(char *s) { return strcpytrim(s, s, STRLIB_MODE_BOTH, 0); } -char *strlibkill(char *s) { return strcpytrim(s, s, STRLIB_MODE_ALL, 0); } \ No newline at end of file +char *strlibkill(char *s) { return strcpytrim(s, s, STRLIB_MODE_ALL, 0); } + +u16 strcon(u8 *str1, u8 *str2, u8 *dst, u16 max_len) { + + u16 len = 0; + max_len -= 1; + + while (*str1 != 0 && len < max_len) { + *dst++ = *str1++; + len++; + } + + while (*str2 != 0 && len < max_len) { + *dst++ = *str2++; + len++; + } + *dst++ = 0; + return len; + + } + +u8 streq(u8 *str1, u8 *str2) { + + u8 s1; + u8 s2; + + for (;;) { + s1 = *str1++; + s2 = *str2++; + if (s1 >= 'a' && s1 <= 'z')s1 -= 0x20; + if (s2 >= 'a' && s2 <= 'z')s2 -= 0x20; + + if (s1 != s2) return 0; + + if (*str1 == 0 && *str2 == 0)return 1; + } + } + + u8 streql(u8 *str1, u8 *str2, u8 len) { + + u8 s1; + u8 s2; + while (len--) { + + s1 = *str1++; + s2 = *str2++; + if (s1 >= 'a' && s1 <= 'z')s1 -= 0x20; + if (s2 >= 'a' && s2 <= 'z')s2 -= 0x20; + + if (s1 != s2) return 0; + } + + return 1; + } + + u16 strContain(u8 *target, u8 *str) { + + u16 targ_len = slen(target); + u16 eq_len; + + + for (eq_len = 0; eq_len < targ_len;) { + + if (*str == 0)return 0; + if (*str++ == target[eq_len]) { + eq_len++; + } else { + eq_len = 0; + } + } + + if (eq_len != targ_len)return 0; + return 1; + + } + + u8 slen(u8 *str) { + + u8 len = 0; + while (*str++)len++; + return len; + } + + u8 scopy(u8 *src, u8 *dst) { + + u8 len = 0; + while (*src != 0) { + *dst++ = *src++; + len++; + } + *dst = 0; + return len; + } + + void strhicase(u8 *str, u8 len) { + + if (len) { + while (len--) { + if (*str >= 'a' && *str <= 'z')*str -= 0x20; + str++; + } + } else { + while (*str != 0) { + if (*str >= 'a' && *str <= 'z')*str -= 0x20; + str++; + } + } + + } \ No newline at end of file diff --git a/src/sys.c b/src/sys.c index 995c643..fc0aa81 100644 --- a/src/sys.c +++ b/src/sys.c @@ -27,26 +27,6 @@ u32 native_tv_mode; #define CIC_6105 5 #define CIC_6106 6 -u16 strcon(u8 *str1, u8 *str2, u8 *dst, u16 max_len) { - - u16 len = 0; - max_len -= 1; - - while (*str1 != 0 && len < max_len) { - *dst++ = *str1++; - len++; - } - - while (*str2 != 0 && len < max_len) { - *dst++ = *str2++; - len++; - } - *dst++ = 0; - return len; - -} - - void dma_read_s(void * ram_address, unsigned long pi_address, unsigned long len) { u32 buff[256]; @@ -196,8 +176,6 @@ void clean(); #define MEM32(addr) *((volatile u32 *)addr) -u8 str_buff[128]; - u8 STR_intToDecString(u32 val, u8 *str) { int len; @@ -275,91 +253,4 @@ void STR_intToDecStringMin(u32 val, u8 *str, u8 min_size) { } -u8 streq(u8 *str1, u8 *str2) { - u8 s1; - u8 s2; - - for (;;) { - s1 = *str1++; - s2 = *str2++; - if (s1 >= 'a' && s1 <= 'z')s1 -= 0x20; - if (s2 >= 'a' && s2 <= 'z')s2 -= 0x20; - - if (s1 != s2) return 0; - - if (*str1 == 0 && *str2 == 0)return 1; - } -} - -u8 streql(u8 *str1, u8 *str2, u8 len) { - - u8 s1; - u8 s2; - while (len--) { - - s1 = *str1++; - s2 = *str2++; - if (s1 >= 'a' && s1 <= 'z')s1 -= 0x20; - if (s2 >= 'a' && s2 <= 'z')s2 -= 0x20; - - if (s1 != s2) return 0; - } - - return 1; -} - -u16 strContain(u8 *target, u8 *str) { - - u16 targ_len = slen(target); - u16 eq_len; - - - for (eq_len = 0; eq_len < targ_len;) { - - if (*str == 0)return 0; - if (*str++ == target[eq_len]) { - eq_len++; - } else { - eq_len = 0; - } - } - - if (eq_len != targ_len)return 0; - return 1; - -} - -u8 slen(u8 *str) { - - u8 len = 0; - while (*str++)len++; - return len; -} - -u8 scopy(u8 *src, u8 *dst) { - - u8 len = 0; - while (*src != 0) { - *dst++ = *src++; - len++; - } - *dst = 0; - return len; -} - -void strhicase(u8 *str, u8 len) { - - if (len) { - while (len--) { - if (*str >= 'a' && *str <= 'z')*str -= 0x20; - str++; - } - } else { - while (*str != 0) { - if (*str >= 'a' && *str <= 'z')*str -= 0x20; - str++; - } - } - -}