Merge branch 'main' of git.disroot.org:dvonik/omos-tcnj2024
no
This commit is contained in:
commit
7f11e9460b
15
sys/include/string.h
Normal file
15
sys/include/string.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef STRING_H
|
||||||
|
#define STRING_H
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
u32 strlen(const char *str);
|
||||||
|
char* strtol(s32 num, char *str, s32 base);
|
||||||
|
char* strtoul(u32 num, char *str, s32 base);
|
||||||
|
char* strcpy(char *dest, const char *src);
|
||||||
|
char* strncpy(char *dest, const char *src, size_t count);
|
||||||
|
char* strcat(char *dest, const char *src);
|
||||||
|
char* strncat(char *dest, const char *src, size_t count);
|
||||||
|
s32 strcmp(const char *lhs, const char *rhs);
|
||||||
|
|
||||||
|
#endif
|
86
sys/lib.c
86
sys/lib.c
@ -12,7 +12,7 @@ strlen(const char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
itoa(s32 num, char *str, s32 base)
|
strtol(s32 num, char *str, s32 base)
|
||||||
{
|
{
|
||||||
s32 i = 0;
|
s32 i = 0;
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ itoa(s32 num, char *str, s32 base)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
utoa(u32 num, char *str, s32 base)
|
strtoul(u32 num, char *str, s32 base)
|
||||||
{
|
{
|
||||||
s32 i = 0;
|
s32 i = 0;
|
||||||
|
|
||||||
@ -48,6 +48,80 @@ utoa(u32 num, char *str, s32 base)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
strcpy(char *dest, const char *src)
|
||||||
|
{
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
while (src[i] != NULL) {
|
||||||
|
dest[i] = src[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
strncpy(char *dest, const char *src, size_t count)
|
||||||
|
{
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
while (src[i] != NULL && i < count) {
|
||||||
|
dest[i] = src[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
strcat(char *dest, const char *src)
|
||||||
|
{
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
while (dest[i] != NULL) i++;
|
||||||
|
|
||||||
|
while (src[i] != NULL) {
|
||||||
|
dest[i] = src[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dest[i] = '\0';
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
strncat(char *dest, const char *src, size_t count)
|
||||||
|
{
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
while (dest[i] != NULL) i++;
|
||||||
|
|
||||||
|
while (src[i] != NULL && i < count) {
|
||||||
|
dest[i] = src[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dest[i] = '\0';
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32
|
||||||
|
strcmp(const char *lhs, const char *rhs)
|
||||||
|
{
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
while (lhs[i] != NULL && rhs[i] != NULL) {
|
||||||
|
if (lhs[i] != rhs[i]) {
|
||||||
|
return lhs[i] - rhs[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
s32
|
s32
|
||||||
printf(const char *format, ...)
|
printf(const char *format, ...)
|
||||||
{
|
{
|
||||||
@ -60,22 +134,22 @@ printf(const char *format, ...)
|
|||||||
if (format[i + 1] == 'd' || format[i + 1] == 'i') {
|
if (format[i + 1] == 'd' || format[i + 1] == 'i') {
|
||||||
//integer numbers
|
//integer numbers
|
||||||
const s32 num = va_arg(list, s32);
|
const s32 num = va_arg(list, s32);
|
||||||
const char* str = itoa(num, strbuf, 10);
|
const char* str = strtol(num, strbuf, 10);
|
||||||
vga_write(str, sizeof(str), 0x0f);
|
vga_write(str, sizeof(str), 0x0f);
|
||||||
} else if (format[i + 1] == 'o') {
|
} else if (format[i + 1] == 'o') {
|
||||||
//octal numbers
|
//octal numbers
|
||||||
const s32 num = va_arg(list, s32);
|
const s32 num = va_arg(list, s32);
|
||||||
const char *str = itoa(num, strbuf, 8);
|
const char *str = strtol(num, strbuf, 8);
|
||||||
vga_write(str, sizeof(str), 0x0f);
|
vga_write(str, sizeof(str), 0x0f);
|
||||||
} else if (format[i + 1] == 'u') {
|
} else if (format[i + 1] == 'u') {
|
||||||
//unsigned integers
|
//unsigned integers
|
||||||
const u32 num = va_arg(list, u32);
|
const u32 num = va_arg(list, u32);
|
||||||
const char *str = utoa(num, strbuf, 10);
|
const char *str = strtoul(num, strbuf, 10);
|
||||||
vga_write(str, sizeof(str), 0x0f);
|
vga_write(str, sizeof(str), 0x0f);
|
||||||
} else if (format[i + 1] == 'x') {
|
} else if (format[i + 1] == 'x') {
|
||||||
//hexadecimal numbers
|
//hexadecimal numbers
|
||||||
const u32 num = va_arg(list, u32);
|
const u32 num = va_arg(list, u32);
|
||||||
const char* str = utoa(num, strbuf, 16);
|
const char* str = strtoul(num, strbuf, 16);
|
||||||
vga_write(str, sizeof(str), 0x0f);
|
vga_write(str, sizeof(str), 0x0f);
|
||||||
} else if (format[i + 1] == 's') {
|
} else if (format[i + 1] == 's') {
|
||||||
//strings
|
//strings
|
||||||
|
@ -3,15 +3,13 @@
|
|||||||
|
|
||||||
u32 curr = START;
|
u32 curr = START;
|
||||||
|
|
||||||
void
|
void
|
||||||
memory_init(void)
|
memory_init(void)
|
||||||
{
|
{
|
||||||
u32 esp, ebp;
|
u32 esp, ebp;
|
||||||
ebp = STACK_START;
|
ebp = STACK_START;
|
||||||
esp = STACK_START;
|
esp = STACK_START;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void *malloc(s32 size) {
|
void *malloc(s32 size) {
|
||||||
u32 addr = curr;
|
u32 addr = curr;
|
||||||
|
Loading…
Reference in New Issue
Block a user