Kekatsu-DS/source/utils/strings.c
2025-03-13 03:12:51 +01:00

77 lines
4.2 KiB
C

#include "strings.h"
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void humanizeSize(char* sizeStr, size_t bufferSize, u64 sizeInBytes)
{
const char* suffix[] = { "B", "KiB", "MiB", "GiB" };
u8 suffixesCount = 4;
u8 i = 0;
double dblBytes = sizeInBytes;
if (sizeInBytes > 1024) {
for (i = 0; (sizeInBytes / 1024) > 0 && i < suffixesCount - 1; i++, sizeInBytes /= 1024)
dblBytes = (double)sizeInBytes / 1024;
}
snprintf(sizeStr, bufferSize, "%.01lf %s", dblBytes, suffix[i]);
}
void lowerStr(char* str)
{
for (size_t i = 0; str[i] != '\0'; i++)
str[i] = tolower(str[i]);
}
void removeAccentsStr(char* str)
{
const char normalizedCharMap[] = {
(char)0, (char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10, (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30, (char)31, (char)32, (char)33, (char)34, (char)35, (char)36, (char)37, (char)38, (char)39, (char)40, (char)41, (char)42, (char)43, (char)44, (char)45, (char)46, (char)47, (char)48, (char)49, (char)50, (char)51, (char)52, (char)53, (char)54, (char)55, (char)56, (char)57, (char)58, (char)59, (char)60, (char)61, (char)62, (char)63, (char)64, (char)65, (char)66, (char)67, (char)68, (char)69, (char)70, (char)71, (char)72, (char)73, (char)74, (char)75, (char)76, (char)77, (char)78, (char)79, (char)80, (char)81, (char)82, (char)83, (char)84, (char)85, (char)86, (char)87, (char)88, (char)89, (char)90, (char)91, (char)92, (char)93, (char)94, (char)95, (char)96, (char)97, (char)98, (char)99, (char)100, (char)101, (char)102, (char)103, (char)104, (char)105, (char)106, (char)107, (char)108, (char)109, (char)110, (char)111, (char)112, (char)113, (char)114, (char)115, (char)116, (char)117, (char)118, (char)119, (char)120, (char)121, (char)122, (char)123, (char)124, (char)125, (char)126, (char)127, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)63, (char)32, (char)33, (char)63, (char)63, (char)63, (char)63, (char)124, (char)63, (char)34, (char)63, (char)97, (char)63, (char)33, (char)63, (char)63, (char)45, (char)63, (char)63, (char)50, (char)51, (char)39, (char)117, (char)80, (char)42, (char)44, (char)49, (char)111, (char)63, (char)63, (char)63, (char)63, (char)63, (char)65, (char)65, (char)65, (char)65, (char)65, (char)65, (char)63, (char)67, (char)69, (char)69, (char)69, (char)69, (char)73, (char)73, (char)73, (char)73, (char)68, (char)78, (char)79, (char)79, (char)79, (char)79, (char)79, (char)120, (char)79, (char)85, (char)85, (char)85, (char)85, (char)89, (char)63, (char)63, (char)97, (char)97, (char)97, (char)97, (char)97, (char)97, (char)63, (char)99, (char)101, (char)101, (char)101, (char)101, (char)105, (char)105, (char)105, (char)105, (char)100, (char)110, (char)111, (char)111, (char)111, (char)111, (char)111, (char)47, (char)111, (char)117, (char)117, (char)117, (char)117, (char)121, (char)63, (char)121
};
// Replace each non-ASCII character with its corresponding in map
size_t i = 0, j = 0;
while (str[i] != '\0') {
u8 c = (u8)str[i];
if (c < 128)
str[j++] = str[i];
else
str[j++] = normalizedCharMap[c];
i++;
}
str[j] = '\0';
}
void safeStr(char* str)
{
removeAccentsStr(str);
// Replace characters not in 'a-zA-Z0-9 ' with '_'
size_t i, j;
for (i = 0, j = 0; str[i]; i++) {
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9') || (str[i] == ' '))
str[j++] = str[i];
else
str[j++] = '_';
}
str[j] = '\0';
}
void joinPath(char* joinedPath, const char* path1, const char* path2)
{
strcpy(joinedPath, path1);
if (joinedPath[strlen(joinedPath) - 1] != '/')
strcat(joinedPath, "/");
if (path2[0] == '/')
strcat(joinedPath, path2 + 1);
else
strcat(joinedPath, path2);
}