diff --git a/Makefile b/Makefile index a519d17..b5e06d5 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,7 @@ KERNELOBJ = bin/kernel.o bin/terminal.o bin/helpers.o bin/pci.o bin/virtualdisk. bin/diskdev.o bin/scheduler.o bin/work.o bin/rbuffer.o bin/errors.o bin/kclock.o bin/tar.o bin/color.o bin/loopback.o \ bin/serial.o bin/io.o bin/syscalls.o bin/list.o bin/hashmap.o bin/vbe.o bin/ksyms.o bin/windowserver.o bin/encoding.o\ bin/mouse.o bin/ipc.o bin/sysinf.o ${PROGRAMOBJ} ${GFXOBJ} bin/font8.o bin/net.o bin/fs.o bin/ext.o bin/fat16.o bin/partition.o\ - bin/admin.o bin/usermanager.o bin/user.o bin/group.o bin/snake.o bin/msgbox.o + bin/admin.o bin/usermanager.o bin/user.o bin/group.o bin/snake.o bin/msgbox.o bin/kevents.o BOOTOBJ = bin/bootloader.o diff --git a/admin/usermanager.c b/admin/usermanager.c index 2f40a92..bbb2e0e 100644 --- a/admin/usermanager.c +++ b/admin/usermanager.c @@ -46,26 +46,26 @@ static const struct userdb default_db = { .name = "admin", .hash = 525286959, /* admin */ .uid = 1, - .permissions = _ + .permissions = ADMIN_FULL_ACCESS }, { .name = "system", .hash = 1, .uid = 2, - .permissions = _ + .permissions = SYSTEM_FULL_ACCESS }, { .name = "guest", .hash = 0, .uid = 3, - .permissions = _ + .permissions = CTRL_PROC_CREATE | ACCESS_NET | ACCESS_FS_READ } }, .groups = { { .name = "admin", .gid = 1, - .permissions = _ + .permissions = USER_CREATE | USER_PWD_MANAGE | USER_GROUP_MANAGE } } }; diff --git a/apps/Makefile b/apps/Makefile index 30524e5..272bdc0 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -56,6 +56,7 @@ programs: staticlibs bin/crt0.o ${USROBJS} @make -C calculator/ @make -C graphs/ @make -C cube/ + @make -C users/ @echo [USR] All user programs created and linked! bin/%.o: utils/%.cpp @@ -83,4 +84,5 @@ clean: @make -C calculator/ clean @make -C graphs/ clean @make -C cube/ clean + @make -C users/ clean rm -f .depend diff --git a/apps/users/Makefile b/apps/users/Makefile new file mode 100644 index 0000000..8a324b3 --- /dev/null +++ b/apps/users/Makefile @@ -0,0 +1,48 @@ +ROOT = ../../ + +CCFLAGS=-m32 -O2 -Wall -Wextra -Wpedantic -Wstrict-aliasing \ + -Wno-pointer-arith -Wno-unused-parameter -nostdlib \ + -nostdinc -ffreestanding -fno-pie -fno-stack-protector \ + -fno-builtin-function -fno-builtin -I $(ROOT)include/ -I $(ROOT)apps/ -fno-exceptions -fno-rtti +MAKEFLAGS += --no-print-directory +UNAME := $(shell uname) +ifeq ($(UNAME),Linux) + CC=gcc + CPP=g++ + AS=as + LD=ld + + CCFLAGS += -elf_i386 + ASFLAGS += --32 + LDFLAGS += -m elf_i386 +else + CC=i386-elf-gcc + CPP=i386-elf-g++ + AS=i386-elf-as + LD=i386-elf-ld +endif + +#### ONLY EDIT THIS #### +OUTPUT = users.o +LIBS = -lcore -lgraphic +EXTENDED = +######################## + +SRC_FILES = $(wildcard *.cpp) +OBJ_FILES = $(SRC_FILES:%.cpp=$(OUTPUTDIR)%.o) +OUTPUTDIR = ./bin/ + +all: $(OUTPUT) install + +install: $(OUTPUT) + @cp $(OUTPUT) $(ROOT)rootfs/bin + +$(OUTPUT): $(OBJ_FILES) + $(LD) -o $@ $(LDFLAGS) $^ -L$(ROOT)apps $(LIBS) $(EXTENDED) -T $(ROOT)apps/utils/linker.ld + +$(OUTPUTDIR)%.o: %.cpp + @mkdir -p $(OUTPUTDIR) + $(CPP) $(CCFLAGS) -c $< -o $@ + +clean: + rm -rf $(OUTPUTDIR)* *.o *.d $(OUTPUT) .depend diff --git a/apps/users/users.cpp b/apps/users/users.cpp new file mode 100644 index 0000000..ea5e303 --- /dev/null +++ b/apps/users/users.cpp @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +#include + +class UserEditor : public Window { + +public: + UserEditor(int width, int height) : Window(200, 200, "User Editor", 1) { + this->width = width; + this->height = height; + + /* Create widgets */ + widgets = new WidgetManager(); + widgets->addWidget(new Button(10, 10, 100, 12, "Button", []() { + printf("Button pressed!\n"); + })); + } + + int eventHandler(struct gfx_event* event) { + switch (event->event) + { + case GFX_EVENT_RESOLUTION: + /* update screensize */ + break; + case GFX_EVENT_EXIT: + delete widgets; + return -1; + case GFX_EVENT_KEYBOARD: + widgets->Keyboard(event->data); + /* keyboard event in e.data */ + break; + case GFX_EVENT_MOUSE: + widgets->Mouse(event->data, event->data2); + break; + } + return 0; + } + + void draw() { + /* Clear screen */ + drawRect(0, 0, width, height, 30); + /* Draw widgets */ + widgets->draw(this); + } + +private: + int width; + int height; + WidgetManager* widgets; +}; + +void editorEntry(void* arg) { + UserEditor t(200, 200); + + struct gfx_event e; + while (1){ + gfx_get_event(&e, GFX_EVENT_BLOCKING); /* alt: GFX_EVENT_NONBLOCKING */ + if(t.eventHandler(&e) == -1) break; + t.draw(); + } + return; +} + +class Users : public Window { +public: + Users(int width, int height) : Window(200, 200, "Users", 1) { + this->width = width; + this->height = height; + + /* Create widgets */ + widgets = new WidgetManager(); + widgets->addWidget(new Button(10, 10, 100, 12, "Button", []() { + printf("Button pressed!\n"); + })); + widgets->addWidget(new Button(10, 30, 100, 12, "Start Edit", []() { + + Thread* editor = new Thread(editorEntry, 0); + editor->start(0); + + })); + + Input* input = new Input(10, 50, 100, 12, "Input"); + widgets->addWidget(input); + + widgets->addWidget(new Checkbox(10, 110, true)); + widgets->addWidget(new Label(30, 110, 100, 12, "Checkbox")); + widgets->addWidget(new Checkbox(10, 130, false)); + } + + int eventHandler(struct gfx_event* event) { + switch (event->event) + { + case GFX_EVENT_RESOLUTION: + /* update screensize */ + break; + case GFX_EVENT_EXIT: + delete widgets; + exit(); + /* exit */ + return -1; + case GFX_EVENT_KEYBOARD: + widgets->Keyboard(event->data); + /* keyboard event in e.data */ + break; + case GFX_EVENT_MOUSE: + widgets->Mouse(event->data, event->data2); + break; + } + return 0; + } + + void draw() { + /* Clear screen */ + drawRect(0, 0, width, height, 30); + /* Draw widgets */ + widgets->draw(this); + } + +private: + int width; + int height; + WidgetManager* widgets; +}; + +int main() +{ + Users t(200, 200); + + struct gfx_event e; + while (1){ + gfx_get_event(&e, GFX_EVENT_BLOCKING); /* alt: GFX_EVENT_NONBLOCKING */ + if(t.eventHandler(&e) == -1) break; + t.draw(); + } + return 0; +} \ No newline at end of file diff --git a/apps/utils/Widgets.hpp b/apps/utils/Widgets.hpp new file mode 100644 index 0000000..9b75591 --- /dev/null +++ b/apps/utils/Widgets.hpp @@ -0,0 +1,305 @@ +/** + * @file Widgets.hpp + * @author Joe Bayer (joexbayer) + * @brief Widgest and components library + * @version 0.1 + * @date 2024-01-20 + * + * @copyright Copyright (c) 2024 + * + */ + +#ifndef __WIDGETS_HPP__ +#define __WIDGETS_HPP__ + +#include +#include +#include + +#define MAX_WIDGETS 32 + +typedef void (*Callback)(); + +/* Extended base class for all types of widgets */ +class Widget { +public: + virtual void draw(Window* window) = 0; + virtual void Keyboard(char c) = 0; + virtual void Mouse() = 0; + virtual bool focusable() = 0; /* Indicates if the widget can receive focus */ + virtual ~Widget() {} + + /* Widget properties */ + int x = 0; + int y = 0; + int width = 0; + int height = 0; + bool focused = false; + +protected: +}; + +/* A simple button widget */ +class Button : public Widget { +public: + Button(int x, int y, int width, int height, char* text, Callback callback) { + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->text = text; + this->callback = callback; + } + + /* Draws the button */ + void draw(Window* window) { + window->drawContouredBox(x, y, width, height, focused ? COLOR_VGA_LIGHT_GRAY : 30); + window->drawText(x + 4, y + 4, text, COLOR_BLACK); + } + + /* Ignores keyboard events */ + void Keyboard(char c) {} + + void Mouse() { + callback(); + } + + bool focusable() { + return false; + } + +private: + char* text; + Callback callback; +}; + +/* A simple input widget */ +class Input : public Widget { +public: + Input(int x, int y, int width, int height, char* text) { + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->text = text; + memset(data, 0, 100); + } + + void draw(Window* window) { + window->drawContouredBox(x, y, width, height, focused ? 28 : 30); + + if(size == 0){ + window->drawText(x + 4, y + 4, text, COLOR_VGA_LIGHT_GRAY); + } else { + window->drawText(x + 4, y + 4, data, COLOR_BLACK); + } + } + + char* getData() { + return data; + } + + /* Handles keyboard events */ + void Keyboard(char c) { + printf("Input: %c\n", c); + if (c == '\b') { + if (size > 0) { + size--; + data[size] = 0; + } + } else { + data[size] = c; + size++; + data[size] = '\0'; + } + } + + void Mouse() { + printf("Input clicked!\n"); + } + + bool focusable() { + return true; + } + +private: + char* text; + char data[100]; + int size = 0; +}; + +/* A simple label widget */ +class Label : public Widget { +public: + Label(int x, int y, int width, int height, char* text) { + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->text = text; + } + + void draw(Window* window) { + window->drawText(x, y, text, COLOR_BLACK); + } + + void Keyboard(char c) {} + + void Mouse() {} + + bool focusable() { + return false; + } + +private: + char* text; +}; + +/* A simple list widget */ +class List : public Widget { +public: + List(int x, int y, int width, int height, char** items, int itemCount) { + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->items = items; + this->itemCount = itemCount; + } + + void draw(Window* window) { + //window->drawContouredBox(x, y, width, height, focused ? 28 : 30); + + for (int i = 0; i < itemCount; i++) { + window->drawCircle(x + 2, y + 6 + i * 12, 2, COLOR_VGA_LIGHT_GRAY, 1); + window->drawText(x + 4, y + 4 + i * 12, items[i], COLOR_BLACK); + } + } + + void Keyboard(char c) {} + + void Mouse() {} + + bool focusable() { + return false; + } + +private: + char** items; + int itemCount; +}; + +/* Simple Checkbox widget */ +class Checkbox : public Widget { +public: + Checkbox(int x, int y, bool value) { + this->x = x; + this->y = y; + this->width = 12; + this->height = 12; + this->value = value; + } + + void draw(Window* window) { + window->drawContouredBox(x, y, width, height, 30); + if (value) { + window->drawCircle(x + width - 6, y + 6, 2, COLOR_VGA_LIGHT_GRAY, 1); + } + } + + void Keyboard(char c) {} + + void Mouse() { + value = !value; + } + + bool focusable() { + return true; + } + +private: + bool value; +}; + +class WidgetManager { +public: + /** + * @brief Adds a widget to the widget manager + * + * @param widget The widget to add + * @return int The index of the widget in the widget manager + */ + int addWidget(Widget* widget) { + if (widgetCount >= MAX_WIDGETS) { + return -1; + } + + widgets[widgetCount] = widget; + widgetCount++; + + return widgetCount - 1; + } + + void draw(Window* window) { + for (int i = 0; i < widgetCount; i++) { + widgets[i]->draw(window); + } + } + + void Keyboard(char c) { + if(focusedWidget != -1){ + widgets[focusedWidget]->Keyboard(c); + } + } + + /** + * @brief Handles mouse events + * + * @param x coordinate + * @param y coordinate + */ + void Mouse(int x, int y) { + for (int i = 0; i < widgetCount; i++) { + Widget* widget = widgets[i]; + + /* Check if the widget is focusable and the mouse is within its bounds */ + bool isWithinBounds = + x >= widget->x && x <= widget->x + widget->width && + y >= widget->y && y <= widget->y + widget->height; + + if (isWithinBounds) { + if (widget->focusable()) { + + /* Unfocus the previously focused widget, if any */ + if(focusedWidget != -1) + widgets[focusedWidget]->focused = false; + + /* Focus the current widget */ + focusedWidget = i; + widget->focused = true; + printf("Focused widget: %d\n", focusedWidget); + } + + widget->Mouse(); + return; + } + } + } + + + Widget* getWidget(int index) { + return widgets[index]; + } + + int getWidgetCount() { + return widgetCount; + } + +private: + Widget* widgets[MAX_WIDGETS]; + int widgetCount = 0; + int focusedWidget = -1; +}; + + +#endif /* __WIDGETS_HPP__ */ \ No newline at end of file diff --git a/graphics/api.c b/graphics/api.c index d4025da..7167de3 100644 --- a/graphics/api.c +++ b/graphics/api.c @@ -55,6 +55,6 @@ int gfx_syscall_hook(int option, void* data, int flags) default: break; } - gfx_commit(); + gfx_commit(); return ERROR_OK; } \ No newline at end of file diff --git a/graphics/composition.c b/graphics/composition.c index 6bc61b8..c9cbe01 100644 --- a/graphics/composition.c +++ b/graphics/composition.c @@ -75,8 +75,18 @@ int gfx_decode_background_image(const char* file) int gfx_set_taskbar(pid_t pid) { ERR_ON_NULL(ws); + struct pcb* taskbar = pcb_get_by_name("taskbar"); + if(taskbar == NULL){ + pid_t pid = start("taskbar", 0, NULL); + if(pid < 0){ + dbgprintf("[WSERVER] Could not start taskbar.\n"); + return -1; + } + + taskbar = pcb_get_by_name("taskbar"); + } - ws->taskbar = pcb_get_by_pid(pid); + ws->taskbar = taskbar; return ERROR_OK; } diff --git a/graphics/windowserver.c b/graphics/windowserver.c index df2da66..1e8f00d 100644 --- a/graphics/windowserver.c +++ b/graphics/windowserver.c @@ -18,6 +18,7 @@ #include #include #include +#include static int ws_init(struct windowserver* ws); static int ws_add(struct windowserver* ws, struct window* window); @@ -155,12 +156,38 @@ static int ws_fullscreen(struct windowserver* ws, struct window* window) return ERROR_OK; } +#define DIAMONDS() int color = (((i / (size + spacing)) + (j / (size + spacing))) % 2 == 0 &&\ + (i % (size + spacing) < size) && (j % (size + spacing) < size) &&\ + (ABS(i % (size + spacing) - size/2) + ABS(j % (size + spacing) - size/2) <= size/2)\ + ) ? 19 :\ + (\ + ((i % (size + spacing) == size/2) || (i % (size + spacing) == size/2 + 1)) &&\ + ((j % (size + spacing) == size/2) || (j % (size + spacing) == size/2 + 1)) &&\ + ((i / (size + spacing)) + (j / (size + spacing))) % 2 == 1\ + ) ? 18 : 20;\ + + static int ws_set_background(struct windowserver* ws, color_t color) { ERR_ON_NULL(ws); WS_VALIDATE(ws); memset(ws->background, color, VBE_SIZE()); + // int j, i; + // for (i = 0; i < 640; i++) { + // for (j = 0; j < 480; j++) { + // /* Checkered pattern */ + // int size = 30; + // int spacing = 10; + // int dot_size = 2; + + // DIAMONDS(); + + // vesa_put_pixel(ws->background, i, j, color); + // } + // } + + return ERROR_OK; } @@ -171,10 +198,10 @@ static int ws_set_background_file(struct windowserver* ws, const char* path) ERR_ON_NULL(path); WS_VALIDATE(ws); - int originalWidth = 320; // Original image width - int originalHeight = 240; // Original image height - int targetWidth = vbe_info->width; // Target screen width - int targetHeight = vbe_info->height; // Target screen height + int originalWidth = 320; + int originalHeight = 240; + int targetWidth = vbe_info->width; + int targetHeight = vbe_info->height; /* upscale image */ float scaleX = (float)targetWidth / (float)originalWidth; @@ -205,14 +232,14 @@ static int ws_set_background_file(struct windowserver* ws, const char* path) for (int i = 0; i < originalWidth; i++){ for (int j = 0; j < originalHeight; j++){ - // Calculate the position on the screen based on the scaling factors + int screenX = (int)(i * scaleX); int screenY = (int)(j * scaleY); - // Retrieve the pixel value from the original image + unsigned char pixelValue = rgb_to_vga(temp_window[j * originalWidth + i]); - // Set the pixel value on the screen at the calculated position + for (int x = 0; x < scaleX; x++){ for (int y = 0; y < scaleY; y++){ vesa_put_pixel(ws->background, screenX + x, screenY + y, pixelValue); diff --git a/include/admin.h b/include/admin.h index 3a78b3f..a4c42c7 100644 --- a/include/admin.h +++ b/include/admin.h @@ -3,8 +3,49 @@ #include -typedef enum __permissions { - _ = 0 << 0, +typedef enum { + _ = 0, + /* File System Permissions */ + ACCESS_FS_READ = 1 << 0, + ACCESS_FS_WRITE = 1 << 1, + ACCESS_FS_EXECUTE = 1 << 2, + ACCESS_FS_RESERVED = 1 << 3, + ACCESS_FS_RESERVED1 = 1 << 4, + + /* System Resource Access */ + ACCESS_NET = 1 << 5, + ACCESS_HW = 1 << 6, + ACCESS_RESERVED = 1 << 7, + + /* Process Management */ + CTRL_PROC_CREATE = 1 << 8, + CTRL_PROC_TERMINATE = 1 << 9, + CTRL_PROC_PRIORITIZE = 1 << 10, + + /* User Management */ + USER_CREATE = 1 << 11, + USER_PWD_MANAGE = 1 << 12, + USER_GROUP_MANAGE = 1 << 13, + + /* Security and Privacy */ + SEC_FW_CONFIG = 1 << 14, + SEC_RESERVED = 1 << 15, + SEC_RESERVED1 = 1 << 16, + + /* Software Management */ + SW_RESERVED = 1 << 17, + SW_RESERVED1= 1 << 18, + SW_RESERVED2 = 1 << 19, + + /* Device Management */ + DEV_PAIR = 1 << 20, + DEV_CONFIG = 1 << 21, + + /* Special Administrative Permissions */ + ADMIN_FULL_ACCESS = 1 << 22, + SYSTEM_FULL_ACCESS = 1 << 23, + ADMIN_RESERVED1 = 1 << 24 + } permission_t; #endif // !__ADMIN_H \ No newline at end of file diff --git a/include/conf.h b/include/conf.h index 3ac156b..4e26678 100644 --- a/include/conf.h +++ b/include/conf.h @@ -9,7 +9,7 @@ #define CONFIG_MAX_SECTIONS 32 #define CONFIG_MAX_NAME_LEN 32 -int config_load(char* filename); +int kernel_config_load(char* filename); char* config_get_value(char* section, char* name); int config_list(); diff --git a/include/errors.h b/include/errors.h index 1ad9fa8..164a0af 100644 --- a/include/errors.h +++ b/include/errors.h @@ -33,6 +33,7 @@ enum errors { ERROR_WINDOW_NOT_FOUND, ERROR_OPS_CORRUPTED, ERROR_OUT_OF_MEMORY, + ERROR_ACCESS_DENIED, }; char* error_get_string(error_t err); diff --git a/include/kernel.h b/include/kernel.h index e5ee0b8..60fedda 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -6,7 +6,7 @@ #include #include #include - +#include #include #define KERNEL_NAME "RetrOS-32" @@ -30,9 +30,9 @@ struct kernel_context { struct usermanager* usermanager; struct scheduler* scheduler; struct networkmanager* networking; + struct kevents* kevents; } services; - struct graphics { struct graphic_context* ctx; struct windowserver* window_server; diff --git a/include/kevents.h b/include/kevents.h new file mode 100644 index 0000000..ae6a24a --- /dev/null +++ b/include/kevents.h @@ -0,0 +1,47 @@ +#ifndef __KEVENTS_H__ +#define __KEVENTS_H__ + +#include +#include +#include + +typedef enum { + KEVENT_INFO, + KEVENT_WARNING, + KEVENT_ERROR, +} kevent_type_t; + +/* prototype */ +struct kevents; + +struct kevents_ops { + int (*init)(struct kevents *events); + + /** + * @brief Add a new event to the list + * @param event kevent_type_t + * @param fmt Format string for info, max 128 chars + * + * @return int + */ + int (*add)(struct kevents *events, kevent_type_t type, const char* fmt, ...); + int (*list)(struct kevents *events); + int (*destroy)(struct kevents *events); +}; + +/* main kevents struct */ +struct kevents { + struct kevents_ops *ops; + struct kevent { + kevent_type_t type; + char info[128]; + uint32_t timestamp; + }* events; + uint32_t count; + size_t size; + +}; + +struct kevents* kevents_create(size_t size); + +#endif // !__KEVENTS_H__ \ No newline at end of file diff --git a/include/usermanager.h b/include/usermanager.h index ef1445d..5d75ece 100644 --- a/include/usermanager.h +++ b/include/usermanager.h @@ -1,10 +1,16 @@ #ifndef F2B1F79B_0C15_4F82_B78A_5ABEC923D093 #define F2B1F79B_0C15_4F82_B78A_5ABEC923D093 +#include #include #include #include #include +#include +#include + +#define IS_AUTHORIZED(permission) (($process->current->user)->permissions & (permission)) +#define AUTHORIZED_GUARD(permission) if (!IS_AUTHORIZED(permission)){ warningf("%s is not authorized!\n"); return ERROR_ACCESS_DENIED; } struct usermanager; diff --git a/kernel/arch/interrupts.c b/kernel/arch/interrupts.c index 4753fe3..e7a7a36 100644 --- a/kernel/arch/interrupts.c +++ b/kernel/arch/interrupts.c @@ -68,20 +68,16 @@ void print_page_fault_info(unsigned long cr2) { /* Check if the page directory entry is present */ if (page_dir_entry & PRESENT_BIT) { - /* Assuming PAGE_TABLE_ADDRESS extracts the address of the page table from the directory entry */ unsigned long *page_table = (unsigned long *)PAGE_TABLE_ADDRESS(page_dir_entry); - /* Get the page table entry */ page_table_entry = page_table[TABLE_INDEX(cr2)]; - /* Print detailed information */ dbgprintf("Page Fault Address: 0x%x\n", cr2); dbgprintf("Page Directory Entry: 0x%x\n", page_dir_entry); if(page_table_entry & PRESENT_BIT){ dbgprintf("Page Table Entry: 0x%x\n", page_table_entry); - /* Analyzing and printing permissions */ dbgprintf("Permissions: %s, %s\n", (page_table_entry & READ_WRITE_BIT) ? "Read/Write" : "Read-Only", (page_table_entry & USER_SUPERVISOR_BIT) ? "User" : "Supervisor"); @@ -94,32 +90,20 @@ void print_page_fault_info(unsigned long cr2) { void page_fault_interrupt(unsigned long cr2, unsigned long err) { uint32_t *ebp = (uint32_t*) __builtin_frame_address(0); - /* - dbgprintf("Return address for iret: 0x%x\n", return_address_for_iret); - dbgprintf("Original ebp: 0x%x\n", original_ebp); - */ - // __backtrace_from((uintptr_t*)ebp); - - interrupt_counter[14]++; - ENTER_CRITICAL(); - - dbgprintf("Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $process->current->stackptr, err, $process->current->name); - /* print page_table entry */ + __backtrace_from((uintptr_t*)ebp); + print_page_fault_info(cr2); pcb_dbg_print($process->current); - if($process->current->is_process){ struct msgbox* box = msgbox_create(MSGBOX_TYPE_WARNING, MSGBOX_BUTTON_OK, "Crash Report", " A program has crashed!", NULL); msgbox_show(box); - kernel_exit(); } #ifdef KERNEL_PANIC_ON_PAGE_FAULT kernel_panic("A critical kernel thread encountered a page fault."); #endif - //vesa_printf(0, 0, "Page fault: 0x%x (Stack: 0x%x) %d (%s)\n", cr2, $process->current->stackptr, err, $process->current->name); kernel_exit(); UNREACHABLE(); @@ -131,7 +115,13 @@ void general_protection_fault() dbgprintf("General Protection Fault: 0x%x - %s\n", $process->current->stackptr, $process->current->name); pcb_dbg_print($process->current); - /* TODO: Some kind of feedback */ + struct msgbox* box = msgbox_create( + MSGBOX_TYPE_WARNING, MSGBOX_BUTTON_OK, + "Crash Report", " A program has crashed", + NULL + ); + msgbox_show(box); + EOI(13); kernel_exit(); UNREACHABLE(); diff --git a/kernel/cmds.c b/kernel/cmds.c index f7902ab..c67f551 100644 --- a/kernel/cmds.c +++ b/kernel/cmds.c @@ -19,6 +19,7 @@ #include #include #include +#include #define COMMAND(name, func) \ int name\ @@ -153,6 +154,29 @@ static int help(int argc, char* argv[]) } EXPORT_KSYMBOL(help); +static int kevents(int argc, char* argv[]) +{ + if(IS_AUTHORIZED(ADMIN_FULL_ACCESS) == 0) { + twritef("You are not authorized to use this command\n"); + return 1; + } + + if(argc < 2) { + twritef("Usage: kevents \n"); + return 1; + } + + if(strcmp(argv[1], "list") == 0) { + $services->kevents->ops->list($services->kevents); + } else { + twritef("Usage: kevents \n"); + return 1; + } + + return 0; +} +EXPORT_KSYMBOL(kevents); + static int view(int argc, char* argv[]){ if(argc < 2) { @@ -334,6 +358,11 @@ static int conf(int argc, char *argv[]) { int ret; + if(IS_AUTHORIZED(ADMIN_FULL_ACCESS) == 0) { + twritef("You are not authorized to use this command\n"); + return 1; + } + if(argc < 2) { twritef("Usage: conf \n"); return 1; @@ -346,7 +375,7 @@ static int conf(int argc, char *argv[]) twritef("Usage: conf load \n"); return 1; } - ret = config_load(argv[2]); + ret = kernel_config_load(argv[2]); if(ret < 0) { twritef("Failed to load config file: %d\n", ret); return 1; @@ -395,6 +424,22 @@ static int services(int argc, char *argv[]) return 0; } + if(strcmp(argv[1], "start") == 0) { + + if(IS_AUTHORIZED(ADMIN_FULL_ACCESS) == 0) { + twritef("You are not authorized to use this command\n"); + return 1; + } + + if(argc < 3) { + twritef("Usage: services start \n"); + return 1; + } + + + return 1; + } + return 0; } EXPORT_KSYMBOL(services); diff --git a/kernel/conf.c b/kernel/conf.c index ab4b2e0..f99bdff 100644 --- a/kernel/conf.c +++ b/kernel/conf.c @@ -88,7 +88,7 @@ int config_list() return 0; } -int config_load(char* filename) +int kernel_config_load(char* filename) { int len; char* buf = kalloc(1024); diff --git a/kernel/kernel.c b/kernel/kernel.c index 231919d..6237640 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -227,11 +227,14 @@ void kernel(uint32_t magic) /* Initilize the kernel symbols from symbols.map */ ksyms_init(); - config_load("sysutil/default.cfg"); + kernel_config_load("sysutil/default.cfg"); $services->usermanager = usermanager_create(); $services->usermanager->ops->load($services->usermanager); + $services->kevents = kevents_create(64); + $services->kevents->ops->init($services->kevents); + start("idled", 0, NULL); if(__kernel_context.graphic_mode != KERNEL_FLAG_TEXTMODE){ start("wind", 0, NULL); @@ -246,6 +249,8 @@ void kernel(uint32_t magic) kernel_boot_printf("Timer initialized."); dbgprintf("Critical counter: %d\n", __cli_cnt); + + $services->kevents->ops->add($services->kevents, KEVENT_INFO, "Kernel successfully booted."); kernel_boot_printf("Starting OS..."); LEAVE_CRITICAL(); diff --git a/kernel/kevents.c b/kernel/kevents.c new file mode 100644 index 0000000..33410e8 --- /dev/null +++ b/kernel/kevents.c @@ -0,0 +1,129 @@ +/** + * @file kevents.c + * @author Joe Bayer (joexbayer) + * @brief Kernel events + * @version 0.1 + * @date 2024-01-19 + * + * @copyright Copyright (c) 2024 + * + */ + +#include +#include +#include +#include +#include + +/* ops prototypes */ +static int kevents_add(struct kevents *events, kevent_type_t type, const char* fmt, ...); +static int kevents_init(struct kevents *events); +static int kevents_destroy(struct kevents *events); +static int kevents_list(struct kevents *events); + +/* ops */ +static struct kevents_ops ops = { + .add = kevents_add, + .init = kevents_init, + .destroy = kevents_destroy, + .list = kevents_list, +}; + +/* helpers */ +static int __kevents_shift(struct kevents *events) +{ + ERR_ON_NULL(events); + + for(size_t i = 0; i < events->count - 1; i++){ + events->events[i] = events->events[i + 1]; + } + + events->count--; + + return 0; +} + +static int kevents_init(struct kevents *events) +{ + ERR_ON_NULL(events); + + /* anything more I need to do? */ + events->count = 0; + + return 0; +} + +static int kevents_list(struct kevents *events) +{ + ERR_ON_NULL(events); + + twritef("Kernel Events:\n"); + for(size_t i = 0; i < events->count; i++){ + struct kevent* event = &events->events[i]; + switch(event->type){ + case KEVENT_INFO: + twritef("[INFO] %s\n", event->info); + break; + case KEVENT_WARNING: + twritef("[WARNING] %s\n", event->info); + break; + case KEVENT_ERROR: + twritef("[ERROR] %s\n", event->info); + break; + default: + twritef("[UNKNOWN] %s\n", event->info); + break; + } + } + + return 0; +} + +static int kevents_destroy(struct kevents *events) +{ + ERR_ON_NULL(events); + + kfree(events->events); + kfree(events); + + return 0; +} + +static int kevents_add(struct kevents *events, kevent_type_t type, const char* fmt, ...) +{ + if(events->size == events->count){ + __kevents_shift(events); + } + + va_list args; + va_start(args, fmt); + + csprintf(events->events[events->count].info, fmt, args); + + va_end(args); + + events->events[events->count].type = type; + events->events[events->count].timestamp = get_time(); + + if(events->count < events->size) events->count++; + + return 0; +} + +struct kevents* kevents_create(size_t size) +{ + struct kevents* kevents = create(struct kevents); + ERR_ON_NULL_PTR(kevents); + + kevents->events = (struct kevent*)kalloc(sizeof(struct kevent) * size); + if(kevents->events == NULL) + { + kfree(kevents); + return NULL; + } + kevents->size = size; + kevents->count = 0; + kevents->ops = &ops; + + return kevents; +} \ No newline at end of file diff --git a/kernel/kthreads/login.c b/kernel/kthreads/login.c index 7fc9877..5de88a5 100644 --- a/kernel/kthreads/login.c +++ b/kernel/kthreads/login.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -123,14 +124,7 @@ void __kthread_entry login() $process->current->user = usr; - /* OK is clicked */ - start("kclock", 0, NULL); - pid_t taskbar = start("taskbar", 0, NULL); - if(taskbar <= 0){ - warningf("Failed to start taskbar"); - } - - dbgprintf("Taskbar started with pid: %d\n", taskbar); + exec_cmd("sh /sysutil/startup.sh"); if(!disk_attached()){ struct msgbox* box = msgbox_create( @@ -142,7 +136,7 @@ void __kthread_entry login() msgbox_show(box); } - gfx_set_taskbar(taskbar); + gfx_set_taskbar(0); return; } } diff --git a/kernel/pcb.c b/kernel/pcb.c index 9db4b30..3c682f2 100644 --- a/kernel/pcb.c +++ b/kernel/pcb.c @@ -25,7 +25,10 @@ #include #include + #include +#include +#include static struct pcb pcb_table[MAX_NUM_OF_PCBS]; static struct process __process = { @@ -33,7 +36,8 @@ static struct process __process = { .name = "kernel", .pid = 0, .user = &(struct user){ - .name = "system" + .name = "system", + .permissions = SYSTEM_FULL_ACCESS, } }, }; @@ -310,19 +314,22 @@ void pcb_dbg_print(struct pcb* pcb) */ int pcb_cleanup_routine(void* arg) { + AUTHORIZED_GUARD(SYSTEM_FULL_ACCESS); + int pid = (int)arg; assert(pid != $process->current->pid && !(pid < 0 || pid > MAX_NUM_OF_PCBS)); dbgprintf("%d\n", __cli_cnt); struct pcb* pcb = &pcb_table[pid]; - gfx_destory_window(pcb_table[pid].gfx_window); + if(pcb->gfx_window != NULL){ + gfx_destory_window(pcb_table[pid].gfx_window); + } /** * @brief A process cannot exit before all its children have exited. * Therefor loop over all pcbs and kill them if current is their parent. */ - for (int i = 0; i < MAX_NUM_OF_PCBS; i++){ if(pcb_table[i].parent == pcb && pcb_table[i].is_process == PCB_THREAD){ pcb_table[i].state = ZOMBIE; @@ -368,6 +375,8 @@ int pcb_cleanup_routine(void* arg) */ error_t pcb_create_thread(struct pcb* parent, void (*entry)(), void* arg, byte_t flags) { + AUTHORIZED_GUARD(CTRL_PROC_CREATE | SYSTEM_FULL_ACCESS | ADMIN_FULL_ACCESS); + /* Initialize PCB and set privileges */ struct pcb* pcb = __pcb_init_process(flags, VMEM_DATA); if(pcb == NULL){ @@ -402,6 +411,8 @@ error_t pcb_create_thread(struct pcb* parent, void (*entry)(), void* arg, byte_t error_t pcb_create_process(char* program, int argc, char** argv, pcb_flag_t flags) { + AUTHORIZED_GUARD(CTRL_PROC_CREATE | SYSTEM_FULL_ACCESS | ADMIN_FULL_ACCESS); + char* buf; int ret, size; struct pcb* pcb; @@ -465,6 +476,9 @@ error_t pcb_create_process(char* program, int argc, char** argv, pcb_flag_t flag */ error_t pcb_create_kthread(void (*entry)(), char* name, int argc, char** argv) { + + AUTHORIZED_GUARD(CTRL_PROC_CREATE | SYSTEM_FULL_ACCESS | ADMIN_FULL_ACCESS); + ENTER_CRITICAL(); struct pcb* pcb = __pcb_get_free(); diff --git a/kernel/terminal.c b/kernel/terminal.c index c56bf83..11d98c5 100644 --- a/kernel/terminal.c +++ b/kernel/terminal.c @@ -104,7 +104,8 @@ void terminal_commit() void terminal_putchar(char c) { - return; + if($process->current == NULL || $process->current->term == NULL) return; + $process->current->term->ops->putchar($process->current->term, c); } diff --git a/lib/errors.c b/lib/errors.c index 594d60b..184030a 100644 --- a/lib/errors.c +++ b/lib/errors.c @@ -38,6 +38,7 @@ static char* error_string[] = { "Window not found.", "Window operations are corrupted.", "Out of memory.", + "Access denied." }; char* error_get_string(error_t err) diff --git a/rootfs/symbols.map b/rootfs/symbols.map index b2a6165..eeaaee5 100644 --- a/rootfs/symbols.map +++ b/rootfs/symbols.map @@ -8,873 +8,880 @@ 00010058 gdt_end 00010058 kernel_boot_printf 000100b7 init_kctors -00010103 kernel -00010561 kernel_get_context -00010567 hexdump -000107b5 __terminal_set_ops -0001087e __terminal_scanf -00010884 __terminal_write -000108ce __terminal_getchar_graphics -00010917 __terminal_scan_graphics -000109f5 __terminal_reset -00010a39 __terminal_detach -00010a7c __terminal_attach -00010ac7 __terminal_remove_line -00010b07 __terminal_putchar_graphics -00010bd0 __terminal_writef -00010eda __terminal_getchar_textmode -00010f02 __terminal_scan_textmode -00010fc6 __terminal_commit_textmode -0001107e __terminal_putchar_textmode -000110ca scan -00011103 terminal_set_color -0001111b __terminal_commit_graphics -00011277 terminal_attach -00011298 terminal_commit -000112b7 terminal_putchar -000112b8 terminal_create -000113dd terminal_destroy -00011414 tlb_flush_addr -0001141c load_page_directory -0001142c enable_paging -0001143e pcb_save_context -0001146a pcb_restore_context -00011493 _start_pcb -000114c5 _start_pcb_skip -000114e0 __ksymbol_lspci -000114fa pci_get_class_name -0001150d pci_get_device_name -0001157e pci_get_vendor_name -000115cc lspci -00011719 pci_get_devices -0001171f pci_read_word -00011779 pci_write_dword -000117c8 pci_enable_device_busmaster -0001181d pci_register_device -0001189e init_pci -00011a4f pci_find_device -00011ae5 virtual_read -00011b10 virtual_write -00011b3b virtual_disk_attach -00011b5a wm_default_changes -00011c02 wm_default_workspace -00011c64 wm_default_draw -00011d02 wm_default_add -00011da9 init_windowmanager -00011ef3 wm_default_mouse_event -00012119 wm_default_push_back -0001220b wm_default_push_front -000122fa wm_default_remove -0001240b wm_destroy -000124e9 wm_new -00012550 screen_set_cursor -000125b0 scrcolor_set -000125c4 scrput -000125ea scrwrite -00012633 scr_clear -00012685 scr_scroll -000126cd scrprintf -00012911 strlen -00012933 strcpy -00012967 strncmp -000129a2 strcmp -000129e2 memcmp -00012a1d parse_arguments -00012b00 strchr -00012b2f getopt -00012c3f memcpy -00012cac strtok -00012d64 xmemcpy -00012deb memset -00012e6b isdigit -00012e7f isspace -00012e8e tolower -00012ea2 isxdigit -00012ec6 htoi -00012f6a atoi -00012ffa itoa -000130a0 itohex -0001311c rdtsc -0001311f rand -0001313b general_protection_fault -000131ab interrupt_get_count -000131ba print_page_fault_info -00013297 page_fault_interrupt -0001335b interrupt_install_handler -0001336d load_data_segments -00013379 isr_handler -0001346c init_interrupts -000135e5 idt_flush -000135ed isr0 -000135fa isr1 -00013607 isr2 -00013614 isr3 -00013621 isr4 -0001362e isr5 -0001363b isr6 -00013648 isr7 -00013655 isr8 -00013662 isr9 -0001366f isr10 -0001367c isr11 -00013689 isr12 -00013696 isr13 -000136a3 isr14 -000136b0 isr15 -000136bd isr16 -000136ca isr17 -000136d7 isr18 -000136e4 isr19 -000136f1 isr20 -000136fe isr21 -0001370b isr22 -00013718 isr23 -00013725 isr24 -00013732 isr25 -0001373f isr26 -0001374c isr27 -00013759 isr28 -00013766 isr29 -00013773 isr30 -00013780 isr31 -0001378d isr32 -0001379a isr33 -000137a7 isr34 -000137b4 isr35 -000137be isr36 -000137c8 isr37 -000137d2 isr38 -000137dc isr39 -000137e6 isr40 -000137f0 isr41 -000137fa isr42 -00013804 isr43 -0001380e isr44 -00013818 isr45 -00013822 isr46 -0001382c isr47 -00013836 isr_entry -00013851 syscall_return_value -00013855 _syscall_entry -00013892 page_fault_save -00013896 page_fault_error -0001389a _page_fault_entry -000138cc timer_callback -00013904 timer_get_tick -0001390a time_get_difference -0001394d init_pit -000139b1 gdt_set_segment -000139fa init_gdt -00013b08 rc -00013cf7 __ksymbol_rc -00013d11 __ksymbol_as -00013d2b __ksymbol_cc -00013d45 as -00014107 cc -00014163 __cc -00014457 vm_print -00014654 eval -00014aee vm_setup -00014b2f vm_init -00014b8a vm_free -00014bb9 vm_setup_stack -00014c15 lex_get_error -00014c22 next -0001512d match -0001517b expression -0001647c statement -00016685 function_parameter -00016847 function_body -00016a56 function_declaration -00016adf enum_declaration -00016bf2 global_declaration -00016e1f lex_init -00016eba program -00016f5b find_mp_floating_ptr -00016f97 smp_parse -000170dc kb_get_char -00017128 kb_add_char -00017163 kb_callback -00017390 init_keyboard -00017407 pcb_await -00017431 __pcb_get_free -000174ef __add_systemcall_pcb_await -00017506 __pcb_free -00017555 __pcb_init_kernel_stack -000175b6 __pcb_init_process -0001767b init_pcbs -000176cc pcb_total_usage -000176f5 pcb_get_info -000177e9 pcb_kill -00017806 Genesis -00017808 idletask -00017823 pcb_get_by_pid -00017834 pcb_get_by_name -0001788d pcb_dbg_print -00017907 pcb_cleanup_routine -00017ada pcb_create_thread -00017b99 pcb_create_process -00017df2 pcb_create_kthread -0001808f start_pcb -000180c7 __pcb_queue_peek -00018106 __pcb_queue_pop -00018162 __pcb_queue_remove -000181d4 __pcb_queue_add -0001824d __pcb_queue_push -000182e6 pcb_new_queue -00018317 memory_map_init -000183de memory_map_get -000183e4 free -0001844e malloc -000184ea calloc -0001851d get_mem_info -00018575 init_memory -00018607 vmem_free -00018677 vmem_alloc -000186e4 vmem_free_page_region -0001884a vmem_page_region_alloc -00018885 vmem_create_page_region -000189c9 vmem_free_allocations -00018af8 vmem_continious_allocation_map -00018afe vmem_free_allocation -00018aff vmem_stack_free -00018bb0 vmem_stack_alloc -00018f35 vmem_dump_heap -00018fca vmem_init_process_thread -000190bb vmem_init_process -000193e9 vmem_cleanup_process_thead -00019460 vmem_cleanup_process -0001964e vmem_init_kernel -0001980f vmem_allocator_create -00019873 vmem_map_driver_region -000198f1 vmem_total_usage -00019904 vmem_init -00019a36 kalloc -00019bcd kcalloc -00019bff kfree -00019c95 palloc -00019cd7 pmemory_used -00019cf3 kmemory_used -00019cf9 kmemory_total -00019d05 kmem_init -00019da2 e1000_receive -00019e7d e1000_transmit -00019f3f e1000_callback -00019f66 _e1000_tx_init -0001a00a _e1000_rx_init -0001a0a4 e1000_attach -0001a2d4 display_get_info -0001a33d kenv_init -0001a354 kenv_set -0001a389 config_list -0001a45a config_load -0001a845 config_get_value -0001a900 spin_lock -0001a920 spin_unlock -0001a92e mutex_init -0001a94b acquire -0001a9e8 release -0001aa8a kthread_entry -0001aae4 kthread_list -0001ab4b register_kthread -0001ac24 start -0001acc6 ata_primary -0001acc7 ata_secondary -0001acc8 ata_wait -0001ad42 ata_write -0001aeb9 ata_read -0001b049 ata_ide_init -0001b219 set_bitmap -0001b23b unset_bitmap -0001b25f get_bitmap -0001b281 get_bitmap_size -0001b295 create_bitmap -0001b2c9 destroy_bitmap -0001b2dc bitmap_unset_continous -0001b316 bitmap_get_continous -0001b3b2 get_free_bitmap -0001b407 __rtc_check_in_progress -0001b429 __rtc_get_register -0001b449 get_current_time -0001b594 get_time -0001b5be init_tss -0001b5ec exec_cmd -0001b6f0 __ksymbol_exec_cmd -0001b70a system_reboot -0001b73e align_to_pointer_size -0001b74c calculate_size_unit -0001b7ae advanced_hash -0001b7e2 kernel_panic -0001b800 kref_init -0001b81a kref_get -0001b842 kref_put -0001b86a csprintf -0001ba6b script_parse -0001bb40 login -0001bf20 __login_create_virt_disk -0001bf4a __register_kthread_login -0001bf64 help -0001c205 clear -0001c226 __ksymbol_new -0001c240 __ksymbol_list -0001c25a __ksymbol_color -0001c274 __ksymbol_about -0001c28e __ksymbol_help -0001c2a8 __ksymbol_view -0001c2c2 __ksymbol_file -0001c2dc __ksymbol_tcp -0001c2f6 __ksymbol_conf -0001c310 __ksymbol_clear -0001c32a __ksymbol_services -0001c344 __ksymbol_reboot -0001c35e services -0001c500 new -0001c641 list -0001c741 file -0001c90f color -0001c9b0 about -0001c9ed view -0001cc02 tcp -0001cedf __tcp_reader -0001d000 conf -0001d285 reboot -0001d2be attach_disk_dev -0001d2e2 disk_attached -0001d2ea disk_name -0001d2f3 disk_device_get -0001d2f9 disk_size -0001d315 write_block -0001d352 write_block_offset -0001d395 read_block -0001d3d2 read_block_offset -0001d43c sched_consume -0001d47d sched_add -0001d4d7 sched_prioritize -0001d58c sched_round_robin -0001d772 sched_exit -0001d82b sched_block -0001d949 sched_default -0001da23 sched_sleep -0001dac9 sched_init_default -0001db4a get_scheduler -0001db50 kernel_sleep -0001db6b kernel_yield -0001dbae kernel_exit -0001dbe0 block -0001dc09 unblock -0001dc0a work_queue_add -0001dcf2 init_worker -0001dd0a worker_thread -0001dda9 __ring_buffer_add -0001de51 __ring_buffer_read -0001df5b rbuffer_new -0001dfc4 rbuffer_free -0001dfe6 error_get_string -0001e022 kclock -0001e502 __register_kthread_kclock -0001e51c tar_extract -0001e76c __ksymbol_tar -0001e786 tar_list -0001e890 tar -0001eb19 rgb_to_vga -0001eb29 rgb_to_components -0001eb50 color_distance_squared -0001ebbb rgb_init_color_table -0001ec4c iface_loopback_write -0001ed0d iface_loopback_interrupt -0001ed24 iface_loopback_read -0001edc7 net_init_loopback -0001edde serial_put -0001ee1e serial_write -0001ee60 serial_printf -0001f000 init_serial -0001f0c6 inportb -0001f0cf inportw -0001f0d9 inportl -0001f0e2 outportb -0001f0f0 outportw -0001f0ff outportl -0001f10c sys_create_thread -0001f12b __add_systemcall_sys_create_thread -0001f136 add_system_call -0001f176 system_call -0001f1e1 hashmap_put -0001f248 hashmap_get -0001f2cc hashmap_add -0001f356 hashmap_free -0001f357 reset_vga_palette -0001f39d vga_set_palette -0001f488 b8to16 -0001f498 vesa_put_pixel -0001f4c2 vesa_put_box -0001f53d vesa_put_block -0001f5b8 vesa_put_char -0001f633 vesa_put_char16 -0001f6c6 vesa_put_icon16 -0001f73f vesa_write -0001f77e vesa_write_str -0001f7ac vesa_fill -0001f82e vesa_fillrect -0001f8a0 vesa_inner_box -0001f9a8 vesa_printf -0001fc15 ksyms_init -0001fe3c ksyms_add_symbol -0001fef5 __ksymbol_backtrace -0001ff0f ksyms_list -0001ff71 ksyms_resolve_symbol -00020024 __backtrace_from -00020141 backtrace -00020152 ws_fullscreen -000202cc ws_remove -0002037c ws_add -00020467 ws_destroy -0002050d ws_draw -000207ba ws_raw_wallpaper -000208a0 ws_set_background_file -00020b7d ws_init -00020c60 ws_set_background -00020d0b ws_new -00020d98 encode_run_length -00020e15 decode_run_length -00020e80 __mouse_handler -00020f97 mouse_wait -00020fdf mouse_write -00021021 mouse_get_event -00021062 mouse_init -00021147 sys_ipc_open -00021195 __add_systemcall_sys_ipc_open -000211ac __add_systemcall_sys_ipc_close -000211c3 __add_systemcall_sys_ipc_send -000211da __add_systemcall_sys_ipc_receive -000211f1 sys_ipc_close -0002123a sys_ipc_send -000212a1 sys_ipc_receive -00021307 sysinf -00022059 __register_kthread_sysinf -00022073 echo -000220ae res -000220ef ifconfig -000220fc __ksymbol_ifconfig -00022116 __ksymbol_ps -00022130 __ksymbol_tree -0002214a __ksymbol_fat16 -00022164 __ksymbol_xxd -0002217e __ksymbol_sh -00022198 __ksymbol_ed -000221b2 __ksymbol_exec -000221cc __ksymbol_ths -000221e6 __ksymbol_dns -00022200 __ksymbol_th -0002221a __ksymbol_kill -00022234 __ksymbol_echo -0002224e __ksymbol_fdisk -00022268 __ksymbol_meminfo -00022282 __ksymbol_res -0002229c __ksymbol_bg -000222b6 __ksymbol_exit -000222d0 __ksymbol_socks -000222ea __ksymbol_reset -00022304 exit -00022338 ps -000225ac print_pcb_tree -000226ab tree -000226eb fat16 -00022713 xxd -00022808 sh -00022908 ed -00022955 exec -00022ab9 ths -00022b25 dns -00022b99 th -00022bb7 kill -00022bd5 fdisk -00022d67 meminfo -00022f46 bg -00022fc5 socks -0002326b __register_kthread_shell -00023285 __register_kthread_textshell -0002329f shell_clear -000232e2 reset_shell -00023353 reset -000233a7 shell_put -00023588 shell -000237e9 cleanup_function -00023810 testfn -00023844 draw_box -00023929 __textshell_reset_box -000239b9 textshell -00023d8a __net_find_interface -00023dea net_drop_packet -00023e0b net_handle_recieve -00023f32 net_get_interfaces -00023f38 net_configure_iface -00023f8a net_incoming_packet -0002403b net_get_iface -000240b1 net_iface_up -000240d8 net_iface_down -000240ff net_list_ifaces -00024219 net_register_interface -0002424a net_send_skb -000242d2 net_get_info -000242f9 networking_main -000244d9 __dhcp_add_option -00024549 __dhcp_send_discovery -0002468b __dhcp_send_request -00024808 dhcp_get_state -00024810 dhcp_get_dns -00024816 dhcp_get_ip -0002482b dhcp_get_gw -00024840 dhcpd -00024abf udp_server -00024b4a tcp_server -00024cbe __net_terminal_writef -00024d23 __register_kthread_tcp_server -00024d3d __register_kthread_udp_server -00024d57 __register_kthread_udptest -00024d71 udptest -00024dfc tcpd -00024ee0 logd -00024f4b __register_kthread_logd -00024f65 logd_attach_by_pid -00024fa9 taskbar_reboot -00024fd5 __reboot -00024fea taskbar_readme -00025003 taskbar_about -0002501c taskbar_clock -00025035 taskbar_sysinf -0002504e taskbar_bg_retro -00025085 taskbar_bg_lotr2 -0002509a taskbar_bg_lotr -000250af taskbar_bg_default_color_gray -000250c1 taskbar_bg_default_color -000250d3 taskbar_wolfstein -0002510e taskbar_bg_graph -00025149 taskbar_bg_calc -00025184 taskbar_colors -000251bf taskbar_cube -000251fa taskbar_editor -00025235 taskbar_finder -00025270 taskbar_terminal -000252b9 __register_kthread_taskbar -000252d3 taskbar_hdr_opt_event -0002535d taskbar -00025914 about -00025adf __register_kthread_about -00025af9 __register_kthread_readme -00025b13 readme -00025c75 gfx_default_hover -00025d94 gfx_destory_window -00025e21 gfx_window_resize -00025eca gfx_window_maximize -00025f43 gfx_default_mouse_up -00026011 gfx_default_mouse_down -000260d3 gfx_default_click -000262c2 gfx_draw_window -000270ae gfx_window_set_resizable -000270c3 kernel_gfx_window_border_color -000270ee gfx_new_window -0002734e gfx_point_in_rectangle -0002737b gfx_draw_component -000273bd gfx_input_event -000274ef gfx_input_draw -000275f7 gfx_input_manager_add -00027658 gfx_composition_remove_window -00027682 gfx_composition_add_window -000276c9 gfx_set_background_color -0002771a gfx_raw_background -00027767 gfx_decode_background_image -000277b4 gfx_set_taskbar -00027807 gfx_compositor_main -0002787b kernel_gfx_draw_circle_helper -00027b27 gfx_get_window_width -00027b3c gfx_get_window_height -00027b51 gfx_push_event -00027c0d gfx_put_icon16 -00027d05 gfx_put_icon32 -00027dfd gfx_event_loop -00027f1c kernel_gfx_draw_rectangle -00028016 kernel_gfx_draw_contoured_box -000280b6 kernel_gfx_draw_pixel -00028154 kernel_gfx_draw_bitmap -00028272 kernel_gfx_draw_char -00028372 kernel_gfx_set_position -0002838e gfx_commit -000283a7 kernel_gfx_draw_text -0002845a gfx_button_ext -0002858d gfx_button -000285ab kernel_gfx_set_title -00028617 kernel_gfx_set_header -00028683 kernel_gfx_draw_line -0002881e kernel_gfx_draw_circle -0002889d kernel_gfx_draw_section -000288a3 kernel_gfx_draw_format_text -00028bf5 gfx_syscall_hook -00028dac gfx_total_themes -00028db2 kernel_gfx_current_theme -00028db8 kernel_gfx_update_theme -00028e86 kernel_gfx_default_theme -00028e8c kernel_gfx_set_theme -00028eb1 kernel_gfx_get_theme -00028ecc gfx_new_ctx -00028f28 gfx_init_framebuffer -00029094 netdev_attach_driver -0002913d is_netdev_attached -0002914b netdev_transmit -00029166 netdev_recieve -0002918f net_ethernet_add_header -00029223 net_ethernet_parse -00029297 __skb_queue_remove -000292d5 __skb_queue_add -00029325 skb_free_queue -0002935d skb_new_queue -000293c4 skb_free -000293ff skb_new -0002946a skb_consume -0002949b __net_arp_send -0002955b net_init_arp -000295a7 net_arp_add_entry -00029636 net_arp_find_entry -00029681 net_arp_respond -000296f6 net_net_arp_request -0002977c arp_parse -00029826 net_ipv4_print -0002982c net_ipv4_add_header -00029963 net_is_ipv4 -000299a0 net_ipv4_parse -00029acd ntohl -00029af9 htonl -00029b0c ntohs -00029b19 htons -00029b26 checksum -00029b7d transport_checksum -00029bd2 ip_to_int -00029c70 net_icmp_handle -00029d35 net_icmp_response -00029d3b net_icmp_request -00029dfe ping -00029e57 net_icmp_parse -00029ec7 net_udp_send -00029ffc net_udp_parse -0002a124 socket_type_to_str -0002a133 socket_domain_to_str -0002a142 socket_protocol_to_str -0002a151 net_sock_bind -0002a19c net_get_sockets -0002a1b8 sock_get -0002a1d9 get_total_sockets -0002a1df net_sock_is_established -0002a223 net_sock_awaiting_ack -0002a267 net_sock_data_ready -0002a2c0 net_sock_read -0002a3c2 net_sock_add_data -0002a622 sock_find_listen_tcp -0002a666 net_sock_find_tcp -0002a858 net_prepare_tcp_sock -0002a8e4 net_sock_accept -0002a8f7 net_socket_find_udp -0002a962 kernel_sock_shutdown -0002a98f kernel_sock_cleanup -0002aa15 kernel_sock_close -0002aa49 kernel_socket_create -0002abcc net_init_sockets -0002ac12 gethostname -0002b12c __add_systemcall_gethostname -0002b143 net_init_dns -0002b172 route -0002b1bf tcb_init -0002b1dd tcb_new -0002b349 tcp_state_to_str -0002b362 tcp_new_connection -0002b3ea tcp_free_connection -0002b40d tcp_is_listening -0002b423 tcp_set_listening -0002b483 tcp_calculate_checksum -0002b547 __tcp_send -0002b663 tcp_send_segment -0002b7a6 tcp_accept_connection -0002b8e8 tcp_send_ack -0002ba1e tcp_read -0002ba24 tcp_recv_segment -0002ba2a tcp_connect -0002bacd tcp_send_syn -0002bad3 tcp_recv_ack -0002bb56 tcp_recv_fin -0002bb5c tcp_recv_syn -0002bc8e tcp_send_fin -0002bd5a tcp_close_connection -0002bd99 tcp_parse -0002c232 kernel_bind -0002c267 kernel_recvfrom -0002c26d kernel_recv -0002c2df kernel_recv_timeout -0002c305 kernel_connect -0002c409 kernel_sendto -0002c4c3 kernel_accept -0002c526 kernel_listen -0002c54e kernel_send -0002c5d4 sys_kernel_bind -0002c606 __add_systemcall_sys_kernel_bind -0002c61d __add_systemcall_sys_kernel_accept -0002c634 __add_systemcall_sys_kernel_connect -0002c64b __add_systemcall_sys_kernel_listen -0002c662 __add_systemcall_sys_kernel_recv -0002c679 __add_systemcall_sys_kernel_recvfrom -0002c690 __add_systemcall_sys_kernel_recv_timeout -0002c6a7 __add_systemcall_sys_kernel_send -0002c6be __add_systemcall_sys_kernel_sendto -0002c6d5 __add_systemcall_sys_socket_create -0002c6ec __add_systemcall_sys_kernel_sock_close -0002c703 sys_kernel_accept -0002c743 sys_kernel_connect -0002c775 sys_kernel_listen -0002c7a4 sys_kernel_recv -0002c7dc sys_kernel_recvfrom -0002c81c sys_kernel_recv_timeout -0002c85a sys_kernel_send -0002c892 sys_kernel_sendto -0002c8d2 sys_socket_create -0002c8f9 sys_kernel_sock_close -0002c93a __iface_send -0002c969 __iface_recieve -0002c998 __iface_assign -0002c9ab __iface_detach -0002c9bf __iface_set_gateway -0002c9d2 __iface_set_netmask -0002c9e5 __iface_configure -0002ca35 __iface_attach -0002ca5a net_interface_create -0002ca92 net_register_netdev -0002cbaa net_interface_destroy -0002cbbf __default_restart -0002cbc5 __default_stop -0002cc2a __default_start -0002cca4 nm_new -0002cd2d nm_free -0002cd72 net_firewall_create -0002cd95 fs_file2fd -0002cdfc fs_alloc_file -0002ce47 fs_free_file -0002cea1 fs_register -0002cf70 fs_init -0002cf76 fs_unregister -0002cfd9 fs_get -0002cfdf fs_close -0002d051 fs_open -0002d0cb fs_seek -0002d148 fs_read -0002d25d fs_load_from_file -0002d2e9 fs_write -0002d3a4 fs_save_to_file -0002d430 fat16_rmdir -0002d436 fat16_stat -0002d43c fat16_close -0002d4a6 fat16_rename -0002d53b fat16_mkdir -0002d620 fat16_remove -0002d693 fat16_open -0002d7dd fat16_read -0002d941 fat16_write -0002da70 fat16_list -0002dd3e fat16_init -0002ddf2 path_next_iter -0002de61 inode_from_path_recursise -0002dedf inode_from_path -0002df9d ext_get_root -0002dfa6 ext_get_current_dir -0002dfb5 ext_get_size -0002dfbb ext_get_inodes -0002dfc1 ext_get_blocks -0002dfc7 ext_sync -0002e03a ext_create -0002e125 ext_read -0002e1a0 ext_seek -0002e1e7 ext_write -0002e253 ext_close -0002e2b5 ext_open_from_directory -0002e3bb ext_open -0002e472 ext_size -0002e49b change_directory -0002e501 ext_create_directory -0002e69b ext_create_file_system -0002e968 init_ext -0002eb04 listdir -0002ec25 __inode_sync -0002ec88 __inode_cache_insert -0002ed7e __inode_load -0002edf2 inodes_sync -0002ee2d inode_get -0002ee8a inode_read -0002f072 inode_write -0002f2d0 alloc_inode -0002f389 mkdir -0002f436 sync -0002f46a mkfs -0002f477 fat16_read_data_from_cluster -0002f4c5 fat16_read_data -0002f5a6 fat16_find_cluster_by_offset -0002f621 fat16_write_data_to_cluster_with_offset -0002f65c fat16_print_cluster_chain -0002f68a fat16_write_data_to_cluster -0002f6bd fat16_write_data -0002f7d9 get_fat_start_block -0002f7e1 get_root_directory_start_block -0002f7f0 get_data_start_block -0002f802 fat16_get_fat_entry -0002f81d fat16_set_fat_entry -0002f85d fat16_sync_fat_table -0002f8d5 fat16_allocate_cluster -0002f8ed fat16_free_cluster -0002f902 fat16_get_free_cluster -0002f957 fat16_sync_directory_entry -0002f9d9 fat16_read_entry -0002fa86 fat16_find_entry -0002fbc1 fat16_rename_entry -0002fc32 fat16_free_clusters -0002fc79 fat16_delete_entry -0002fce0 fat16_add_entry -0002fe47 fat16_used_blocks -0002fe80 fat16_to_upper -0002feac fat16_name_compare -0002ffd1 sstrtok -00030092 fat16_directory_entry_debug -00030162 fat16_get_directory_entry -0003035a fat16_create_directory -0003045f fat16_read_file -000304b0 fat16_create_file -0003052e fat16_create_empty_file -000305ee fat16_directory_entries -000306d4 fat16_mbr_clear -0003077d fat16_mbr_add_entry -0003086e fat16_print_root_directory_entries -00030886 fat16_change_directory -0003090e fat16_bootblock_info -00030a8b fat16_set_time -00030abf fat16_set_date -00030af7 fat16_load -00030c76 fat16_format -00030f2b mbr_partition_type_string -00030fae mbr_partitions_parse -00031077 mbr_get -0003107d mbr_partition_load -0003109b __list_users -0003112c __change_user -000311ce __remove_user -0003127a __add_user -00031364 __find_user -00031439 __authenticate_user -00031547 __save_users -000315cb __load_users -00031789 __ksymbol_admin -000317a3 admin -00031ab7 usermanager_create -00031ad6 __ksymbol_snakegame -00031af0 init_game -00031b3e draw -00031b9a get_input -00031bb9 update -00031d40 game_loop -00031d66 snakegame -00031db1 __msgbox -000321b1 msgbox_create -000321e4 msgbox_show -0003222c _code_end +00010109 kernel +000105a7 kernel_get_context +000105b1 hexdump +00010801 __terminal_set_ops +000108ce __terminal_scanf +000108d8 __terminal_write +00010926 __terminal_getchar_graphics +00010973 __terminal_scan_graphics +00010a55 __terminal_reset +00010a9d __terminal_detach +00010ae4 __terminal_attach +00010b33 __terminal_remove_line +00010b73 __terminal_putchar_graphics +00010c40 __terminal_writef +00010f4f __terminal_getchar_textmode +00010f7b __terminal_scan_textmode +00011043 __terminal_commit_textmode +000110ff __terminal_putchar_textmode +0001114f scan +0001118c terminal_set_color +000111a8 __terminal_commit_graphics +00011309 terminal_attach +0001132e terminal_commit +00011351 terminal_putchar +00011387 terminal_create +000114b0 terminal_destroy +000114ec tlb_flush_addr +000114f4 load_page_directory +00011504 enable_paging +00011516 pcb_save_context +00011542 pcb_restore_context +0001156b _start_pcb +0001159d _start_pcb_skip +000115b8 __ksymbol_lspci +000115d6 pci_get_class_name +000115ed pci_get_device_name +00011662 pci_get_vendor_name +000116b4 lspci +00011805 pci_get_devices +0001180f pci_read_word +0001186c pci_write_dword +000118bf pci_enable_device_busmaster +00011918 pci_register_device +0001199d init_pci +00011b61 pci_find_device +00011bfb virtual_read +00011c2a virtual_write +00011c59 virtual_disk_attach +00011c7c wm_default_changes +00011d28 wm_default_workspace +00011d8e wm_default_draw +00011e30 wm_default_add +00011edb init_windowmanager +00012027 wm_default_mouse_event +00012245 wm_default_push_back +0001233b wm_default_push_front +0001242e wm_default_remove +00012543 wm_destroy +00012625 wm_new +00012690 screen_set_cursor +000126f0 scrcolor_set +00012708 scrput +00012734 scrwrite +00012781 scr_clear +000127d7 scr_scroll +00012823 scrprintf +00012aa3 strlen +00012ac9 strcpy +00012aff strncmp +00012b3c strcmp +00012b80 memcmp +00012bbd parse_arguments +00012ca6 strchr +00012cd9 getopt +00012e24 memcpy +00012e95 strtok +00012f51 xmemcpy +00012fda memset +00013058 isdigit +00013070 isspace +00013083 tolower +0001309b isxdigit +000130c3 htoi +0001316b atoi +000131fd itoa +000132ad itohex +0001332d rdtsc +00013334 rand +00013354 general_protection_fault +000133e8 interrupt_get_count +000133fb print_page_fault_info +000134d8 page_fault_interrupt +0001356e interrupt_install_handler +00013584 load_data_segments +00013594 isr_handler +0001368b init_interrupts +00013808 idt_flush +00013810 isr0 +0001381d isr1 +0001382a isr2 +00013837 isr3 +00013844 isr4 +00013851 isr5 +0001385e isr6 +0001386b isr7 +00013878 isr8 +00013885 isr9 +00013892 isr10 +0001389f isr11 +000138ac isr12 +000138b9 isr13 +000138c6 isr14 +000138d3 isr15 +000138e0 isr16 +000138ed isr17 +000138fa isr18 +00013907 isr19 +00013914 isr20 +00013921 isr21 +0001392e isr22 +0001393b isr23 +00013948 isr24 +00013955 isr25 +00013962 isr26 +0001396f isr27 +0001397c isr28 +00013989 isr29 +00013996 isr30 +000139a3 isr31 +000139b0 isr32 +000139bd isr33 +000139ca isr34 +000139d7 isr35 +000139e1 isr36 +000139eb isr37 +000139f5 isr38 +000139ff isr39 +00013a09 isr40 +00013a13 isr41 +00013a1d isr42 +00013a27 isr43 +00013a31 isr44 +00013a3b isr45 +00013a45 isr46 +00013a4f isr47 +00013a59 isr_entry +00013a74 syscall_return_value +00013a78 _syscall_entry +00013ab5 page_fault_save +00013ab9 page_fault_error +00013abd _page_fault_entry +00013aef timer_callback +00013b2b timer_get_tick +00013b35 time_get_difference +00013b7a init_pit +00013be2 gdt_set_segment +00013c2d init_gdt +00013d3f rc +00013f32 __ksymbol_rc +00013f50 __ksymbol_as +00013f6e __ksymbol_cc +00013f8c as +00014352 cc +000143b2 __cc +000146ab vm_print +000148ac eval +00014d4b vm_setup +00014d90 vm_init +00014def vm_free +00014e22 vm_setup_stack +00014e80 lex_get_error +00014e91 next +000154ac match +000154fe expression +00016919 statement +00016b26 function_parameter +00016cec function_body +00016eff function_declaration +00016f8c enum_declaration +000170a2 global_declaration +000172d3 lex_init +00017372 program +00017417 find_mp_floating_ptr +00017457 smp_parse +000175a1 kb_get_char +000175ef kb_add_char +0001762e kb_callback +0001785f init_keyboard +000178da pcb_await +00017908 __pcb_get_free +000179ce __add_systemcall_pcb_await +000179e9 __pcb_free +00017a38 __pcb_init_kernel_stack +00017a99 __pcb_init_process +00017b5e init_pcbs +00017bb3 pcb_total_usage +00017bd4 pcb_get_info +00017cba pcb_kill +00017cdb Genesis +00017ce1 idletask +00017d00 pcb_get_by_pid +00017d15 pcb_get_by_name +00017d72 pcb_dbg_print +00017df0 pcb_cleanup_routine +00018005 pcb_create_thread +00018101 pcb_create_process +0001839a pcb_create_kthread +00018680 start_pcb +000186bc __pcb_queue_peek +000186ff __pcb_queue_pop +0001875f __pcb_queue_remove +000187d5 __pcb_queue_add +00018852 __pcb_queue_push +000188ef pcb_new_queue +00018924 memory_map_init +000189f0 memory_map_get +000189fa free +00018a68 malloc +00018b08 calloc +00018b3f get_mem_info +00018b9b init_memory +00018c31 vmem_free +00018ca5 vmem_alloc +00018d16 vmem_free_page_region +00018e7f vmem_page_region_alloc +00018eba vmem_create_page_region +00018ffd vmem_free_allocations +00019125 vmem_continious_allocation_map +0001912f vmem_free_allocation +00019134 vmem_stack_free +000191e9 vmem_stack_alloc +00019593 vmem_dump_heap +0001962c vmem_init_process_thread +00019721 vmem_init_process +00019a4e vmem_cleanup_process_thead +00019ac9 vmem_cleanup_process +00019cb9 vmem_init_kernel +00019e7a vmem_allocator_create +00019ee4 vmem_map_driver_region +00019f66 vmem_total_usage +00019f7d vmem_init +0001a0b5 kalloc +0001a250 kcalloc +0001a286 kfree +0001a320 palloc +0001a370 pmemory_used +0001a391 kmemory_used +0001a39b kmemory_total +0001a3ab kmem_init +0001a44c e1000_receive +0001a528 e1000_transmit +0001a5ee e1000_callback +0001a619 _e1000_tx_init +0001a6c1 _e1000_rx_init +0001a75f e1000_attach +0001a9b2 display_get_info +0001aa20 kenv_init +0001aa3b kenv_set +0001aa77 config_list +0001ab5d kernel_config_load +0001af2b config_get_value +0001afee spin_lock +0001b012 spin_unlock +0001b024 mutex_init +0001b046 acquire +0001b0e7 release +0001b18d kthread_entry +0001b1eb kthread_list +0001b256 register_kthread +0001b333 start +0001b3d9 ata_primary +0001b3de ata_secondary +0001b3e3 ata_wait +0001b45d ata_write +0001b5cf ata_read +0001b74d ata_ide_init +0001b921 set_bitmap +0001b947 unset_bitmap +0001b96f get_bitmap +0001b995 get_bitmap_size +0001b9ad create_bitmap +0001b9e5 destroy_bitmap +0001b9fc bitmap_unset_continous +0001ba39 bitmap_get_continous +0001bad3 get_free_bitmap +0001bb2c __rtc_check_in_progress +0001bb53 __rtc_get_register +0001bb77 get_current_time +0001bcc0 get_time +0001bcee init_tss +0001bd20 exec_cmd +0001be79 __ksymbol_exec_cmd +0001be97 system_reboot +0001becf align_to_pointer_size +0001bee1 calculate_size_unit +0001bf41 advanced_hash +0001bf7c kernel_panic +0001bf9e kref_init +0001bfbc kref_get +0001bfe8 kref_put +0001c014 csprintf +0001c212 script_parse +0001c2e4 login +0001c681 __login_create_virt_disk +0001c6af __register_kthread_login +0001c6cd help +0001c972 clear +0001c997 __ksymbol_new +0001c9b5 __ksymbol_list +0001c9d3 __ksymbol_color +0001c9f1 __ksymbol_about +0001ca0f __ksymbol_help +0001ca2d __ksymbol_kevents +0001ca4b __ksymbol_view +0001ca69 __ksymbol_file +0001ca87 __ksymbol_tcp +0001caa5 __ksymbol_conf +0001cac3 __ksymbol_clear +0001cae1 __ksymbol_services +0001caff __ksymbol_reboot +0001cb1d kevents +0001cbfb services +0001ce2d new +0001cf72 list +0001d076 file +0001d248 color +0001d2ed about +0001d32e view +0001d547 tcp +0001d828 __tcp_reader +0001d94d conf +0001dc19 reboot +0001dc56 attach_disk_dev +0001dc7e disk_attached +0001dc8a disk_name +0001dc97 disk_device_get +0001dca1 disk_size +0001dcc1 write_block +0001dd02 write_block_offset +0001dd49 read_block +0001dd8a read_block_offset +0001ddf8 sched_consume +0001de3d sched_add +0001de9b sched_prioritize +0001df54 sched_round_robin +0001e13a sched_exit +0001e1f7 sched_block +0001e319 sched_default +0001e3f4 sched_sleep +0001e49e sched_init_default +0001e523 get_scheduler +0001e52d kernel_sleep +0001e54c kernel_yield +0001e593 kernel_exit +0001e5c9 block +0001e5f6 unblock +0001e5fb work_queue_add +0001e6ff init_worker +0001e71b worker_thread +0001e7be __ring_buffer_add +0001e86a __ring_buffer_read +0001e978 rbuffer_new +0001e9e5 rbuffer_free +0001ea0b error_get_string +0001ea4b kclock +0001ef26 __register_kthread_kclock +0001ef44 tar_extract +0001f194 __ksymbol_tar +0001f1b2 tar_list +0001f2bd tar +0001f54a rgb_to_vga +0001f55e rgb_to_components +0001f589 color_distance_squared +0001f5f9 rgb_init_color_table +0001f684 iface_loopback_write +0001f749 iface_loopback_interrupt +0001f764 iface_loopback_read +0001f80e net_init_loopback +0001f829 serial_put +0001f86d serial_write +0001f8b3 serial_printf +0001fa67 init_serial +0001fb31 inportb +0001fb3e inportw +0001fb4c inportl +0001fb59 outportb +0001fb69 outportw +0001fb7a outportl +0001fb8a sys_create_thread +0001fbad __add_systemcall_sys_create_thread +0001fbbc add_system_call +0001fc00 system_call +0001fc6f hashmap_put +0001fcdb hashmap_get +0001fd63 hashmap_add +0001fdf1 hashmap_free +0001fdf6 reset_vga_palette +0001fe40 vga_set_palette +0001ff2f b8to16 +0001ff45 vesa_put_pixel +0001ff73 vesa_put_box +0001ffed vesa_put_block +00020067 vesa_put_char +000200e1 vesa_put_char16 +00020179 vesa_put_icon16 +000201f4 vesa_write +00020237 vesa_write_str +00020269 vesa_fill +000202ed vesa_fillrect +0002035c vesa_inner_box +00020468 vesa_printf +000206f4 ksyms_init +00020913 ksyms_add_symbol +000209d0 __ksymbol_backtrace +000209ee ksyms_list +00020a54 ksyms_resolve_symbol +00020b0b __backtrace_from +00020c29 backtrace +00020c3e ws_fullscreen +00020dbc ws_remove +00020e70 ws_add +00020f5f ws_destroy +00021009 ws_draw +000212ba ws_raw_wallpaper +000213a4 ws_set_background_file +00021684 ws_init +0002176b ws_set_background +0002181a ws_new +000218ab encode_run_length +00021934 decode_run_length +000219ab __mouse_handler +00021ac3 mouse_wait +00021b0b mouse_write +00021b4d mouse_get_event +00021b92 mouse_init +00021c7b sys_ipc_open +00021ccd __add_systemcall_sys_ipc_open +00021ce8 __add_systemcall_sys_ipc_close +00021d03 __add_systemcall_sys_ipc_send +00021d1e __add_systemcall_sys_ipc_receive +00021d39 sys_ipc_close +00021d86 sys_ipc_send +00021df1 sys_ipc_receive +00021e5b sysinf +00022bc7 __register_kthread_sysinf +00022be5 echo +00022c24 res +00022c69 ifconfig +00022c7a __ksymbol_ifconfig +00022c98 __ksymbol_ps +00022cb6 __ksymbol_tree +00022cd4 __ksymbol_fat16 +00022cf2 __ksymbol_xxd +00022d10 __ksymbol_sh +00022d2e __ksymbol_ed +00022d4c __ksymbol_exec +00022d6a __ksymbol_ths +00022d88 __ksymbol_dns +00022da6 __ksymbol_th +00022dc4 __ksymbol_kill +00022de2 __ksymbol_echo +00022e00 __ksymbol_fdisk +00022e1e __ksymbol_meminfo +00022e3c __ksymbol_res +00022e5a __ksymbol_bg +00022e78 __ksymbol_exit +00022e96 __ksymbol_socks +00022eb4 __ksymbol_reset +00022ed2 exit +00022f0a ps +00023182 print_pcb_tree +00023281 tree +000232c5 fat16 +000232f1 xxd +000233ea sh +000234ee ed +0002353f exec +000236a9 ths +00023719 dns +00023791 th +000237b3 kill +000237d5 fdisk +0002396b meminfo +00023b4e bg +00023bd1 socks +00023e7a __register_kthread_shell +00023e98 __register_kthread_textshell +00023eb6 shell_clear +00023efd reset_shell +00023f72 reset +00023fca shell_put +000241b0 shell +00024415 cleanup_function +00024440 testfn +00024478 draw_box +00024561 __textshell_reset_box +000245f1 textshell +000249c7 __net_find_interface +00024a27 net_drop_packet +00024a48 net_handle_recieve +00024b73 net_get_interfaces +00024b7d net_configure_iface +00024bd3 net_incoming_packet +00024c85 net_get_iface +00024d01 net_iface_up +00024d2c net_iface_down +00024d57 net_list_ifaces +00024e75 net_register_interface +00024eaa net_send_skb +00024f36 net_get_info +00024f61 networking_main +00025141 __dhcp_add_option +000251ab __dhcp_send_discovery +000252ed __dhcp_send_request +0002546a dhcp_get_state +00025476 dhcp_get_dns +00025480 dhcp_get_ip +00025499 dhcp_get_gw +000254b2 dhcpd +00025746 udp_server +000257d5 tcp_server +0002594d __net_terminal_writef +000259b6 __register_kthread_tcp_server +000259d4 __register_kthread_udp_server +000259f2 __register_kthread_udptest +00025a10 udptest +00025a9f tcpd +00025b87 logd +00025bf6 __register_kthread_logd +00025c14 logd_attach_by_pid +00025c5c taskbar_reboot +00025c8c __reboot +00025ca5 taskbar_readme +00025cc2 taskbar_about +00025cdf taskbar_clock +00025cfc taskbar_sysinf +00025d19 taskbar_bg_retro +00025d54 taskbar_bg_lotr2 +00025d6d taskbar_bg_lotr +00025d86 taskbar_bg_default_color_gray +00025d9c taskbar_bg_default_color +00025db2 taskbar_wolfstein +00025df1 taskbar_bg_graph +00025e30 taskbar_bg_calc +00025e6f taskbar_colors +00025eae taskbar_cube +00025eed taskbar_editor +00025f2c taskbar_finder +00025f6b taskbar_terminal +00025fb8 __register_kthread_taskbar +00025fd6 taskbar_hdr_opt_event +00026060 taskbar +0002666d about +0002683c __register_kthread_about +0002685a __register_kthread_readme +00026878 readme +000269de gfx_default_hover +00026b0c gfx_draw_window +00027927 gfx_destory_window +000279b8 gfx_window_resize +00027a65 gfx_window_maximize +00027ae2 gfx_default_mouse_up +00027bb4 gfx_default_mouse_down +00027c7a gfx_default_click +00027e6d gfx_window_set_resizable +00027e86 kernel_gfx_window_border_color +00027eb5 gfx_new_window +0002811c gfx_point_in_rectangle +0002814d gfx_draw_component +00028193 gfx_input_event +000282b4 gfx_input_draw +000283c0 gfx_input_manager_add +00028425 gfx_composition_remove_window +00028453 gfx_composition_add_window +0002849e gfx_set_background_color +000284f3 gfx_raw_background +00028544 gfx_decode_background_image +00028595 gfx_set_taskbar +00028639 gfx_compositor_main +000286b1 kernel_gfx_draw_circle_helper +00028928 gfx_get_window_width +00028941 gfx_get_window_height +0002895a gfx_push_event +00028a21 gfx_put_icon16 +00028b19 gfx_put_icon32 +00028c0f gfx_event_loop +00028d35 kernel_gfx_draw_rectangle +00028e37 kernel_gfx_draw_contoured_box +00028edb kernel_gfx_draw_pixel +00028f84 kernel_gfx_draw_bitmap +000290a9 kernel_gfx_draw_char +00029193 kernel_gfx_set_position +000291b3 gfx_commit +000291d0 kernel_gfx_draw_text +00029287 gfx_button_ext +000293be gfx_button +000293e0 kernel_gfx_set_title +00029450 kernel_gfx_set_header +000294c0 kernel_gfx_draw_line +0002965a kernel_gfx_draw_circle +000296dd kernel_gfx_draw_section +000296e7 kernel_gfx_draw_format_text +00029a39 gfx_syscall_hook +00029bf5 gfx_total_themes +00029bff kernel_gfx_current_theme +00029c09 kernel_gfx_update_theme +00029cdb kernel_gfx_default_theme +00029ce5 kernel_gfx_set_theme +00029d0e kernel_gfx_get_theme +00029d2d gfx_new_ctx +00029d8d gfx_init_framebuffer +00029efd netdev_attach_driver +00029faa is_netdev_attached +00029fbc netdev_transmit +00029fdb netdev_recieve +0002a008 net_ethernet_add_header +0002a0a0 net_ethernet_parse +0002a11b __skb_queue_remove +0002a15d __skb_queue_add +0002a1b1 skb_free_queue +0002a1ed skb_new_queue +0002a258 skb_free +0002a297 skb_new +0002a306 skb_consume +0002a33b __net_arp_send +0002a3fb net_init_arp +0002a44b net_arp_add_entry +0002a4e3 net_arp_find_entry +0002a532 net_arp_respond +0002a5ab net_net_arp_request +0002a635 arp_parse +0002a6e3 net_ipv4_print +0002a6ed net_ipv4_add_header +0002a828 net_is_ipv4 +0002a869 net_ipv4_parse +0002a99a ntohl +0002a9ca htonl +0002a9e1 ntohs +0002a9f2 htons +0002aa03 checksum +0002aa5e transport_checksum +0002aab7 ip_to_int +0002ab59 net_icmp_handle +0002ac22 net_icmp_response +0002ac2c net_icmp_request +0002acf3 ping +0002ad50 net_icmp_parse +0002adc4 net_udp_send +0002aefd net_udp_parse +0002b029 socket_type_to_str +0002b03c socket_domain_to_str +0002b04f socket_protocol_to_str +0002b062 net_sock_bind +0002b0b1 net_get_sockets +0002b0d1 sock_get +0002b0f6 get_total_sockets +0002b100 net_sock_is_established +0002b148 net_sock_awaiting_ack +0002b190 net_sock_data_ready +0002b1eb net_sock_read +0002b2f0 net_sock_add_data +0002b554 sock_find_listen_tcp +0002b59c net_sock_find_tcp +0002b78f net_prepare_tcp_sock +0002b81f net_sock_accept +0002b836 net_socket_find_udp +0002b8a5 kernel_sock_shutdown +0002b8d6 kernel_sock_cleanup +0002b960 kernel_sock_close +0002b998 kernel_socket_create +0002bb1f net_init_sockets +0002bb69 gethostname +0002c097 __add_systemcall_gethostname +0002c0b2 net_init_dns +0002c0e5 route +0002c136 tcb_init +0002c158 tcb_new +0002c2c8 tcp_state_to_str +0002c2e5 tcp_new_connection +0002c371 tcp_free_connection +0002c398 tcp_is_listening +0002c3b2 tcp_set_listening +0002c416 tcp_calculate_checksum +0002c4df __tcp_send +0002c5fb tcp_send_segment +0002c742 tcp_accept_connection +0002c888 tcp_send_ack +0002c9c0 tcp_read +0002c9ca tcp_recv_segment +0002c9d4 tcp_connect +0002ca7b tcp_send_syn +0002ca85 tcp_recv_ack +0002cb0c tcp_recv_fin +0002cb16 tcp_recv_syn +0002cc4c tcp_send_fin +0002cd1c tcp_close_connection +0002cd5f tcp_parse +0002d1fb kernel_bind +0002d234 kernel_recvfrom +0002d23e kernel_recv +0002d2b4 kernel_recv_timeout +0002d2de kernel_connect +0002d3e4 kernel_sendto +0002d4a2 kernel_accept +0002d509 kernel_listen +0002d535 kernel_send +0002d5bf sys_kernel_bind +0002d5f5 __add_systemcall_sys_kernel_bind +0002d610 __add_systemcall_sys_kernel_accept +0002d62b __add_systemcall_sys_kernel_connect +0002d646 __add_systemcall_sys_kernel_listen +0002d661 __add_systemcall_sys_kernel_recv +0002d67c __add_systemcall_sys_kernel_recvfrom +0002d697 __add_systemcall_sys_kernel_recv_timeout +0002d6b2 __add_systemcall_sys_kernel_send +0002d6cd __add_systemcall_sys_kernel_sendto +0002d6e8 __add_systemcall_sys_socket_create +0002d703 __add_systemcall_sys_kernel_sock_close +0002d71e sys_kernel_accept +0002d762 sys_kernel_connect +0002d798 sys_kernel_listen +0002d7cb sys_kernel_recv +0002d807 sys_kernel_recvfrom +0002d84b sys_kernel_recv_timeout +0002d88d sys_kernel_send +0002d8c9 sys_kernel_sendto +0002d90d sys_socket_create +0002d938 sys_kernel_sock_close +0002d97d __iface_send +0002d9b0 __iface_recieve +0002d9e3 __iface_assign +0002d9fa __iface_detach +0002da12 __iface_set_gateway +0002da29 __iface_set_netmask +0002da40 __iface_configure +0002da94 __iface_attach +0002dabd net_interface_create +0002daf9 net_register_netdev +0002dc15 net_interface_destroy +0002dc2e __default_restart +0002dc38 __default_stop +0002dca1 __default_start +0002dd24 nm_new +0002ddb1 nm_free +0002ddfa net_firewall_create +0002de21 fs_file2fd +0002de8a fs_alloc_file +0002ded9 fs_free_file +0002df37 fs_register +0002e00a fs_init +0002e014 fs_unregister +0002e07b fs_get +0002e085 fs_close +0002e0fb fs_open +0002e179 fs_seek +0002e1fa fs_read +0002e313 fs_load_from_file +0002e3a3 fs_write +0002e462 fs_save_to_file +0002e4f2 fat16_rmdir +0002e4fc fat16_stat +0002e506 fat16_close +0002e574 fat16_rename +0002e60d fat16_mkdir +0002e6f6 fat16_remove +0002e76d fat16_open +0002e8bb fat16_read +0002ea1e fat16_write +0002eb51 fat16_list +0002ee23 fat16_init +0002eedb path_next_iter +0002ef49 inode_from_path_recursise +0002efc7 inode_from_path +0002f089 ext_get_root +0002f096 ext_get_current_dir +0002f0a9 ext_get_size +0002f0b3 ext_get_inodes +0002f0bd ext_get_blocks +0002f0c7 ext_sync +0002f13e ext_create +0002f22d ext_read +0002f2ac ext_seek +0002f2f7 ext_write +0002f367 ext_close +0002f3cd ext_open_from_directory +0002f4d5 ext_open +0002f590 ext_size +0002f5bd change_directory +0002f627 ext_create_directory +0002f7c5 ext_create_file_system +0002fa96 init_ext +0002fc36 listdir +0002fd5d __inode_sync +0002fdc0 __inode_cache_insert +0002feb6 __inode_load +0002ff2a inodes_sync +0002ff69 inode_get +0002ffca inode_read +000301ba inode_write +00030421 alloc_inode +000304de mkdir +0003058f sync +000305c7 mkfs +000305d8 fat16_read_data_from_cluster +0003062a fat16_read_data +00030707 fat16_find_cluster_by_offset +00030786 fat16_write_data_to_cluster_with_offset +000307c5 fat16_print_cluster_chain +000307f7 fat16_write_data_to_cluster +0003082e fat16_write_data +00030949 get_fat_start_block +00030955 get_root_directory_start_block +00030968 get_data_start_block +0003097e fat16_get_fat_entry +0003099d fat16_set_fat_entry +000309e1 fat16_sync_fat_table +00030a5d fat16_allocate_cluster +00030a79 fat16_free_cluster +00030a92 fat16_get_free_cluster +00030aeb fat16_sync_directory_entry +00030b72 fat16_read_entry +00030c23 fat16_find_entry +00030d5e fat16_rename_entry +00030dd3 fat16_free_clusters +00030e1e fat16_delete_entry +00030e89 fat16_add_entry +00030ff4 fat16_used_blocks +00031031 fat16_to_upper +00031061 fat16_name_compare +0003117c sstrtok +0003123f fat16_directory_entry_debug +00031316 fat16_get_directory_entry +0003151f fat16_create_directory +00031628 fat16_read_file +0003167d fat16_create_file +000316ff fat16_create_empty_file +000317c7 fat16_directory_entries +000318b2 fat16_mbr_clear +0003197d fat16_mbr_add_entry +00031a72 fat16_print_root_directory_entries +00031a8e fat16_change_directory +00031b1a fat16_bootblock_info +00031c9b fat16_set_time +00031cd3 fat16_set_date +00031d0f fat16_load +00031e92 fat16_format +0003214b mbr_partition_type_string +000321d3 mbr_partitions_parse +000322a1 mbr_get +000322ab mbr_partition_load +000322cd __list_users +00032362 __change_user +00032408 __remove_user +000324b8 __add_user +000325a6 __find_user +00032679 __authenticate_user +0003278c __save_users +00032814 __load_users +00032a1a __ksymbol_admin +00032a38 admin +00032d50 usermanager_create +00032d73 __ksymbol_snakegame +00032d91 init_game +00032de1 draw +00032e41 get_input +00032e64 update +00032ff0 game_loop +0003301a snakegame +00033069 __msgbox +0003347c msgbox_create +000334b3 msgbox_show +000334ff kevents_list +00033675 kevents_init +000336bb kevents_destroy +00033714 kevents_add +000337cf kevents_create +00033856 _code_end diff --git a/rootfs/sysutil/startup.sh b/rootfs/sysutil/startup.sh new file mode 100644 index 0000000..7dc9d37 --- /dev/null +++ b/rootfs/sysutil/startup.sh @@ -0,0 +1,3 @@ +exec kclock +exec taskbar +exec /bin/users.o diff --git a/rootfs/sysutil/symbols.map b/rootfs/sysutil/symbols.map index 6ad57bc..b3bf55b 100644 --- a/rootfs/sysutil/symbols.map +++ b/rootfs/sysutil/symbols.map @@ -267,7 +267,7 @@ 0001a22e kenv_init 0001a245 kenv_set 0001a27a config_list -0001a34b config_load +0001a34b kernel_config_load 0001a736 config_get_value 0001a7f1 spin_lock 0001a811 spin_unlock