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]); vfs_detect_partitions(dir_data[i]);
} }
printf("Bleh\n"); printf("Bleh\n");
//why did i stop working on this? what was wrong with this?
for(;;); for(;;);
} }
extern void kmain(kernel_info_t *kernel_info){ 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]; ((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){ 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){ if(((vector->size + 1) * vector->sizeof_elements) >> 12 != (vector->size * vector->sizeof_elements)){
vector->size++;
void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096); void *newptr = kmalloc((vector->size * vector->sizeof_elements)/4096);
for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){ for(uint8_t i = 0; i < (vector->size - 1) * vector->sizeof_elements; i++){
((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size]; ((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size];
} }
} }
for(uint32_t i = 0; i < vector->sizeof_elements; i++){ 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){ void vector_pop(uint32_t pos, vector_t *vector, void *element){
for(uint32_t i = 0; i < vector->sizeof_elements; i++){ for(uint32_t i = 0; i < vector->sizeof_elements; i++){

View File

@ -18,6 +18,7 @@ typedef struct vector{
void *ptr; void *ptr;
uint32_t size; uint32_t size;
uint32_t sizeof_elements; uint32_t sizeof_elements;
uint32_t pages;
}vector_t; }vector_t;
vector_t *init_vector(void *vecptr, uint32_t sizeof_elements, uint32_t elements, void *initializer); 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")){ if(!strcmp(statement, "ECHO")){
//this is purely for testing purposes. //this is purely for testing purposes.
printf("[ INITRC ]");
i++; i++;
while(ptr[i] != '\n' && ptr[i]){ while(ptr[i] != '\n' && ptr[i]){
if(ptr[i] != '\"'){ if(ptr[i] != '\"'){

View File

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

View File

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

View File

@ -69,25 +69,25 @@ void vfs_detect_partitions(vfile_t *file){
return; return;
} }
void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){ // void vfs_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key){
if(mount_handler == 0){ // if(mount_handler == 0){
return; // return;
} // }
for(uint32_t i = 0; i < 32; i++){ // for(uint32_t i = 0; i < 32; i++){
if(mount_handlers[i].callback == 0){ // if(mount_handlers[i].callback == 0){
mount_handlers[i].callback = mount_handler; // mount_handlers[i].callback = mount_handler;
mount_handlers[i].key = key; // mount_handlers[i].key = key;
} // }
} // }
} // }
void vfs_del_mount_handler(uint32_t key){ // void vfs_del_mount_handler(uint32_t key){
for(uint32_t i = 0; i < 32; i++){ // for(uint32_t i = 0; i < 32; i++){
if(mount_handlers[i].key == key){ // if(mount_handlers[i].key == key){
mount_handlers[i].callback = 0; // mount_handlers[i].callback = 0;
mount_handlers[i].key = 0; // mount_handlers[i].key = 0;
} // }
} // }
} // }
void vfs_init(){ void vfs_init(){
mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT); 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); 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 *search_dir(char *name, vfile_t dir);
vfile_t *fopen(char *name); vfile_t *fopen(char *name);
void vfs_del_mount_handler(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_add_mount_handler(int (*mount_handler)(vfile_t *device, MOUNT_OPERATION op, ...), uint32_t key);
void vfs_detect_partitions(vfile_t *file); 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_FREE, //free memory allocated by malloc
MODULE_API_PMALLOC64K, MODULE_API_PMALLOC64K,
MODULE_API_KMALLOC_PADDR, MODULE_API_KMALLOC_PADDR,
MODULE_ADD_FS_HANDLER, MODULE_MESSAGE_HANDLER
MODULE_DEL_FS_HANDLER,
}; };
typedef uint32_t (*KOS_MAPI_FP)(unsigned int function, ...); typedef uint32_t (*KOS_MAPI_FP)(unsigned int function, ...);
@ -33,6 +32,7 @@ typedef struct module{
uint8_t flags; uint8_t flags;
uint16_t interrupts; uint16_t interrupts;
uint32_t key; uint32_t key;
void (*message_handler)(uint32_t message, ...);
void (*fini)(void); void (*fini)(void);
}module_t; }module_t;