Fixed kstdlib.c:vector_push(), added modules.c:dispatch_message()

This commit is contained in:
notsomeidiot123 2026-01-22 11:41:20 -05:00
parent 92b0eb9fcf
commit 402f4f5593
9 changed files with 58 additions and 38 deletions

View File

@ -39,6 +39,7 @@ void sysinit(){
vfs_detect_partitions(dir_data[i]);
}
printf("Bleh\n");
//why did i stop working on this? what was wrong with this?
for(;;);
}
extern void kmain(kernel_info_t *kernel_info){

View File

@ -61,17 +61,30 @@ void vector_set(uint32_t pos, vector_t *vector, void *new_element){
((uint8_t *)(vector->ptr))[i] = ((uint8_t *)new_element)[i];
}
}
// void vector_push(vector_t *vector, void *new_element){
// if((vector->size * vector->sizeof_elements)/4096 > ((vector->size + 1) * vector->sizeof_elements)/4096){
// vector->size++;
// void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096);
// for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){
// ((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size];
// }
// }
// for(uint32_t i = 0; i < vector->sizeof_elements; i++){
// ((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[vector->size + i];
// }
// printf(" (vector push ) %d", vector->size);
// }
void vector_push(vector_t *vector, void *new_element){
if((vector->size * vector->sizeof_elements)/4096 + 1> ((vector->size + 1) * vector->sizeof_elements)/4096 + 1){
vector->size++;
if(((vector->size + 1) * vector->sizeof_elements) >> 12 != (vector->size * vector->sizeof_elements)){
void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096);
for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){
((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size];
}
}
for(uint32_t i = 0; i < vector->sizeof_elements; i++){
((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[vector->size + i];
((uint8_t *)(vector->ptr))[vector->size + i] = ((uint8_t *)new_element)[i];
}
vector->size++;
}
void vector_pop(uint32_t pos, vector_t *vector, void *element){
for(uint32_t i = 0; i < vector->sizeof_elements; i++){

View File

@ -18,6 +18,7 @@ typedef struct vector{
void *ptr;
uint32_t size;
uint32_t sizeof_elements;
uint32_t pages;
}vector_t;
vector_t *init_vector(void *vecptr, uint32_t sizeof_elements, uint32_t elements, void *initializer);

View File

@ -29,6 +29,7 @@ void initrc_read(vfile_t *file){
}
if(!strcmp(statement, "ECHO")){
//this is purely for testing purposes.
printf("[ INITRC ]");
i++;
while(ptr[i] != '\n' && ptr[i]){
if(ptr[i] != '\"'){

View File

@ -21,14 +21,15 @@ uint32_t module_api(uint32_t func, ...){
if(structure == 0){
return_value = -1;
}
vector_push(modules, structure);
uint32_t tmp = pm_alloc();
(structure->key) = (modules->size ^ 190507) + tmp << 12 ^ 4405648937 ^ 8592807313 >> 5;
structure->key & 0xffffff00 | modules->size;
vector_push(modules, structure);
pm_free(tmp);
return_value = 0;
printf("vector size -> %d", structure->key);
break;
case MODULE_API_ADDINT:
case MODULE_API_ADDINT:
uint32_t int_index = va_arg(vars, uint32_t);
uint32_t key = va_arg(vars, uint32_t);
void *interrupt_handler = va_arg(vars, void *);
@ -124,16 +125,19 @@ uint32_t module_api(uint32_t func, ...){
uint32_t size = va_arg(vars, uint32_t);
return_value = (uint32_t)kmalloc_page_paddr((uint32_t)paddr, size);
break;
case MODULE_ADD_FS_HANDLER:
void *handler = va_arg(vars, void (*)(void *, uint32_t, ...));
case MODULE_MESSAGE_HANDLER:
key = va_arg(vars, uint32_t);
vfs_add_mount_handler(handler, key);
void *handler = va_arg(vars, void (*)());
for(int i = 0; i < modules->size; i++){
module_t* module = ((module_t *)vector_get(i, modules));
if(module->key == key){
module->message_handler = handler;
return_value = 0;
break;
}
return_value = -1;
}
break;
case MODULE_DEL_FS_HANDLER:
key = va_arg(vars, uint32_t);
vfs_del_mount_handler(key);
break;
}
va_end(vars);
return return_value;

View File

@ -31,8 +31,7 @@ enum MODULE_API_FUNCS{
MODULE_API_FREE, //free memory allocated by malloc
MODULE_API_PMALLOC64K,
MODULE_API_KMALLOC_PADDR,
MODULE_ADD_FS_HANDLER,
MODULE_DEL_FS_HANDLER,
MODULE_MESSAGE_HANDLER,
};
typedef struct module{
@ -42,6 +41,7 @@ typedef struct module{
uint8_t flags;
uint16_t interrupts;
uint32_t key;
void (*message_handler)(uint32_t message, ...);
void (*fini)(void);
}module_t;

View File

@ -69,25 +69,25 @@ void vfs_detect_partitions(vfile_t *file){
return;
}
void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){
if(mount_handler == 0){
return;
}
for(uint32_t i = 0; i < 32; i++){
if(mount_handlers[i].callback == 0){
mount_handlers[i].callback = mount_handler;
mount_handlers[i].key = key;
}
}
}
void vfs_del_mount_handler(uint32_t key){
for(uint32_t i = 0; i < 32; i++){
if(mount_handlers[i].key == key){
mount_handlers[i].callback = 0;
mount_handlers[i].key = 0;
}
}
}
// void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){
// if(mount_handler == 0){
// return;
// }
// for(uint32_t i = 0; i < 32; i++){
// if(mount_handlers[i].callback == 0){
// mount_handlers[i].callback = mount_handler;
// mount_handlers[i].key = key;
// }
// }
// }
// void vfs_del_mount_handler(uint32_t key){
// for(uint32_t i = 0; i < 32; i++){
// if(mount_handlers[i].key == key){
// mount_handlers[i].callback = 0;
// mount_handlers[i].key = 0;
// }
// }
// }
void vfs_init(){
mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT);

View File

@ -82,6 +82,6 @@ int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t coun
int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count);
vfile_t *search_dir(char *name, vfile_t dir);
vfile_t *fopen(char *name);
void vfs_del_mount_handler(uint32_t key);
void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key);
// void vfs_del_mount_handler(uint32_t key);
// void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key);
void vfs_detect_partitions(vfile_t *file);

View File

@ -21,8 +21,7 @@ enum MODULE_API_FUNCS{
MODULE_API_FREE, //free memory allocated by malloc
MODULE_API_PMALLOC64K,
MODULE_API_KMALLOC_PADDR,
MODULE_ADD_FS_HANDLER,
MODULE_DEL_FS_HANDLER,
MODULE_MESSAGE_HANDLER
};
typedef uint32_t (*KOS_MAPI_FP)(unsigned int function, ...);
@ -33,6 +32,7 @@ typedef struct module{
uint8_t flags;
uint16_t interrupts;
uint32_t key;
void (*message_handler)(uint32_t message, ...);
void (*fini)(void);
}module_t;