Add 'help' command, clean up formatting.

This commit is contained in:
Ivan Baravy 2020-10-17 05:13:18 +03:00
parent e834b93108
commit 116ef5ca33
7 changed files with 1157 additions and 525 deletions

View File

@ -81,7 +81,7 @@ umka_fuse.o: umka_fuse.c umka.h
$(CC) $(CFLAGS_32) `pkg-config fuse3 --cflags` -c $< $(CC) $(CFLAGS_32) `pkg-config fuse3 --cflags` -c $<
umka_os.o: umka_os.c umka.h umka_os.o: umka_os.c umka.h
$(CC) $(CFLAGS_32) -c $< -D_DEFAULT_SOURCE $(CC) $(CFLAGS_32) -c $< -D_XOPEN_SOURCE=600
umka_ping.o: umka_ping.c umka.h umka_ping.o: umka_ping.c umka.h
$(CC) $(CFLAGS_32) -D_DEFAULT_SOURCE -c $< $(CC) $(CFLAGS_32) -D_DEFAULT_SOURCE -c $<

1112
shell.c

File diff suppressed because it is too large Load Diff

395
umka.h
View File

@ -6,7 +6,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#define __USE_GNU
#include <signal.h> #include <signal.h>
#define BDFE_LEN_CP866 304 #define BDFE_LEN_CP866 304
@ -41,11 +40,20 @@ typedef struct {
uint8_t pad3[1024-71]; uint8_t pad3[1024-71];
} __attribute__((packed)) process_information_t; } __attribute__((packed)) process_information_t;
_Static_assert(sizeof(process_information_t) == 0x400, "must be 0x400 bytes long"); _Static_assert(sizeof(process_information_t) == 0x400,
"must be 0x400 bytes long");
typedef struct { typedef struct {
uint32_t frame, grab, work_3d_dark, work_3d_light, grab_text, work, uint32_t frame;
work_button, work_button_text, work_text, work_graph; uint32_t grab;
uint32_t work_3d_dark;
uint32_t work_3d_light;
uint32_t grab_text;
uint32_t work;
uint32_t work_button;
uint32_t work_button_text;
uint32_t work_text;
uint32_t work_graph;
} system_colors_t; } system_colors_t;
typedef enum { typedef enum {
@ -115,13 +123,19 @@ typedef struct disk_t disk_t;
typedef struct { typedef struct {
uint32_t strucsize; uint32_t strucsize;
void (*close)(void *userdata) __attribute__((__stdcall__)); __attribute__((__stdcall__)) void (*close)(void *userdata);
void (*closemedia)(void *userdata) __attribute__((__stdcall__)); __attribute__((__stdcall__)) void (*closemedia)(void *userdata);
int (*querymedia)(void *userdata, diskmediainfo_t *info) __attribute__((__stdcall__)); __attribute__((__stdcall__)) int (*querymedia)(void *userdata,
int (*read)(void *userdata, void *buffer, off_t startsector, size_t *numsectors) __attribute__((__stdcall__)); diskmediainfo_t *info);
int (*write)(void *userdata, void *buffer, off_t startsector, size_t *numsectors) __attribute__((__stdcall__)); __attribute__((__stdcall__)) int (*read)(void *userdata, void *buffer,
int (*flush)(void *userdata) __attribute__((__stdcall__)); off_t startsector,
unsigned int (*adjust_cache_size)(void *userdata, size_t suggested_size) __attribute__((__stdcall__)); size_t *numsectors);
__attribute__((__stdcall__)) int (*write)(void *userdata, void *buffer,
off_t startsector,
size_t *numsectors);
__attribute__((__stdcall__)) int (*flush)(void *userdata);
__attribute__((__stdcall__)) unsigned int
(*adjust_cache_size)(void *userdata, size_t suggested_size);
} diskfunc_t; } diskfunc_t;
struct disk_t { struct disk_t {
@ -346,18 +360,32 @@ typedef struct {
uint16_t ttl; uint16_t ttl;
} arp_entry_t; } arp_entry_t;
void kos_osloop(void); __attribute__((__noreturn__)) void
void irq0(int signo, siginfo_t *info, void *context); kos_osloop(void);
void umka_init(void); void
void i40(void); irq0(int signo, siginfo_t *info, void *context);
uint32_t kos_time_to_epoch(uint32_t *time);
disk_t *disk_add(diskfunc_t *disk, const char *name, void *userdata, uint32_t flags) __attribute__((__stdcall__)); void
void *disk_media_changed(diskfunc_t *disk, int inserted) __attribute__((__stdcall__)); umka_init(void);
void disk_del(disk_t *disk) __attribute__((__stdcall__));
void hash_oneshot(void *ctx, void *data, size_t len); void
i40(void);
uint32_t
kos_time_to_epoch(uint32_t *time);
__attribute__((__stdcall__)) disk_t *
disk_add(diskfunc_t *disk, const char *name, void *userdata, uint32_t flags);
__attribute__((__stdcall__)) void *
disk_media_changed(diskfunc_t *disk, int inserted);
__attribute__((__stdcall__)) void
disk_del(disk_t *disk);
void
hash_oneshot(void *ctx, void *data, size_t len);
extern uint8_t xfs_user_functions[]; extern uint8_t xfs_user_functions[];
extern uint8_t ext_user_functions[]; extern uint8_t ext_user_functions[];
@ -365,24 +393,27 @@ extern uint8_t fat_user_functions[];
extern uint8_t ntfs_user_functions[]; extern uint8_t ntfs_user_functions[];
extern uint8_t kos_ramdisk[2880*512]; extern uint8_t kos_ramdisk[2880*512];
disk_t *kos_ramdisk_init(void);
void kos_set_mouse_data(uint32_t btn_state, int32_t xmoving, int32_t ymoving, disk_t *
int32_t vscroll, int32_t hscroll) kos_ramdisk_init(void);
__attribute__((__stdcall__));
static inline void umka_mouse_move(int lbheld, int mbheld, int rbheld, __attribute__((__stdcall__)) void
int xabs, int32_t xmoving, kos_set_mouse_data(uint32_t btn_state, int32_t xmoving, int32_t ymoving,
int yabs, int32_t ymoving, int32_t vscroll, int32_t hscroll);
int32_t hscroll, int32_t vscroll) {
static inline void
umka_mouse_move(int lbheld, int mbheld, int rbheld, int xabs, int32_t xmoving,
int yabs, int32_t ymoving, int32_t hscroll, int32_t vscroll) {
uint32_t btn_state = lbheld + (rbheld << 1) + (mbheld << 2) + uint32_t btn_state = lbheld + (rbheld << 1) + (mbheld << 2) +
(yabs << 30) + (xabs << 31); (yabs << 30) + (xabs << 31);
kos_set_mouse_data(btn_state, xmoving, ymoving, vscroll, hscroll); kos_set_mouse_data(btn_state, xmoving, ymoving, vscroll, hscroll);
} }
net_buff_t *kos_net_buff_alloc(size_t size) __attribute__((__stdcall__)); __attribute__((__stdcall__)) net_buff_t *
kos_net_buff_alloc(size_t size);
static inline void umka_new_sys_threads(uint32_t flags, void (*entry)(), void *stack) { static inline void
umka_new_sys_threads(uint32_t flags, void (*entry)(), void *stack) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"pushad;" "pushad;"
"call kos_new_sys_threads;" "call kos_new_sys_threads;"
@ -394,7 +425,8 @@ static inline void umka_new_sys_threads(uint32_t flags, void (*entry)(), void *s
: "memory", "cc"); : "memory", "cc");
} }
static inline void kos_enable_acpi() { static inline void
kos_enable_acpi() {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"pushad;" "pushad;"
"call enable_acpi;" "call enable_acpi;"
@ -404,7 +436,8 @@ static inline void kos_enable_acpi() {
: "memory", "cc"); : "memory", "cc");
} }
static inline void kos_acpi_call_name(void *ctx, const char *name) { static inline void
kos_acpi_call_name(void *ctx, const char *name) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"pushad;" "pushad;"
"push %[name];" "push %[name];"
@ -426,7 +459,8 @@ typedef struct {
uint32_t ebx; uint32_t ebx;
} f76ret_t; } f76ret_t;
static inline void umka_stack_init() { static inline void
umka_stack_init() {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"pushad;" "pushad;"
"call kos_stack_init;" "call kos_stack_init;"
@ -436,7 +470,8 @@ static inline void umka_stack_init() {
: "memory", "cc"); : "memory", "cc");
} }
static inline int32_t kos_net_add_device(net_device_t *dev) { static inline int32_t
kos_net_add_device(net_device_t *dev) {
int32_t dev_num; int32_t dev_num;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call net_add_device" "call net_add_device"
@ -447,8 +482,11 @@ static inline int32_t kos_net_add_device(net_device_t *dev) {
return dev_num; return dev_num;
} }
void umka_cli(void); void
void umka_sti(void); umka_cli(void);
void
umka_sti(void);
extern uint8_t coverage_begin[]; extern uint8_t coverage_begin[];
extern uint8_t coverage_end[]; extern uint8_t coverage_end[];
@ -590,7 +628,7 @@ extern appdata_t kos_slot_base[];
extern void umka_do_change_task(appdata_t *new); extern void umka_do_change_task(appdata_t *new);
extern void scheduler_add_thread(void); extern void scheduler_add_thread(void);
extern void find_next_task(void); extern void find_next_task(void);
extern uint32_t kos_lfb_base[]; extern uint8_t kos_lfb_base[];
extern uint16_t kos_win_stack[]; extern uint16_t kos_win_stack[];
extern uint16_t kos_win_pos[]; extern uint16_t kos_win_pos[];
extern uint32_t kos_acpi_ssdt_cnt; extern uint32_t kos_acpi_ssdt_cnt;
@ -600,7 +638,8 @@ extern void *acpi_ctx;
extern uint32_t kos_acpi_usage; extern uint32_t kos_acpi_usage;
extern disk_t disk_list; extern disk_t disk_list;
static inline void umka_scheduler_add_thread(appdata_t *thread, int32_t priority) { static inline void
umka_scheduler_add_thread(appdata_t *thread, int32_t priority) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call do_change_thread" "call do_change_thread"
: :
@ -624,7 +663,8 @@ typedef struct {
int same; int same;
} find_next_task_t; } find_next_task_t;
static inline find_next_task_t umka_find_next_task(int32_t priority) { static inline find_next_task_t
umka_find_next_task(int32_t priority) {
find_next_task_t fnt; find_next_task_t fnt;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call find_next_task;" "call find_next_task;"
@ -638,8 +678,8 @@ static inline find_next_task_t umka_find_next_task(int32_t priority) {
return fnt; return fnt;
} }
static inline void umka_i40(pushad_t *regs) { static inline void
umka_i40(pushad_t *regs) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"push ebp;" "push ebp;"
"mov ebp, %[ebp];" "mov ebp, %[ebp];"
@ -657,13 +697,11 @@ static inline void umka_i40(pushad_t *regs) {
: "memory"); : "memory");
} }
static inline void umka_sys_draw_window(size_t x, size_t xsize, static inline void
size_t y, size_t ysize, umka_sys_draw_window(size_t x, size_t xsize, size_t y, size_t ysize,
uint32_t color, int has_caption, uint32_t color, int has_caption, int client_relative,
int client_relative, int fill_workarea, int gradient_fill, int movable,
int fill_workarea, int gradient_fill, uint32_t style, const char *caption) {
int movable, uint32_t style,
const char *caption) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -678,8 +716,8 @@ static inline void umka_sys_draw_window(size_t x, size_t xsize,
: "memory"); : "memory");
} }
static inline void umka_sys_set_pixel(size_t x, size_t y, uint32_t color, static inline void
int invert) { umka_sys_set_pixel(size_t x, size_t y, uint32_t color, int invert) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -690,14 +728,11 @@ static inline void umka_sys_set_pixel(size_t x, size_t y, uint32_t color,
: "memory"); : "memory");
} }
static inline void umka_sys_write_text(size_t x, size_t y, static inline void
uint32_t color, umka_sys_write_text(size_t x, size_t y, uint32_t color, int asciiz,
int asciiz, int fill_background, int fill_background, int font_and_encoding,
int font_and_encoding, int draw_to_buffer, int scale_factor, const char *string,
int draw_to_buffer, size_t length, uintptr_t background_color_or_buffer) {
int scale_factor,
const char *string, size_t length,
uintptr_t background_color_or_buffer) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -712,8 +747,9 @@ static inline void umka_sys_write_text(size_t x, size_t y,
: "memory"); : "memory");
} }
static inline void umka_sys_put_image(void *image, size_t xsize, size_t ysize, static inline void
size_t x, size_t y) { umka_sys_put_image(void *image, size_t xsize, size_t ysize, size_t x,
size_t y) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -724,10 +760,9 @@ static inline void umka_sys_put_image(void *image, size_t xsize, size_t ysize,
: "memory"); : "memory");
} }
static inline void umka_sys_button(size_t x, size_t xsize, static inline void
size_t y, size_t ysize, umka_sys_button(size_t x, size_t xsize, size_t y, size_t ysize,
size_t button_id, size_t button_id, int draw_button, int draw_frame,
int draw_button, int draw_frame,
uint32_t color) { uint32_t color) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -740,7 +775,8 @@ static inline void umka_sys_button(size_t x, size_t xsize,
: "memory"); : "memory");
} }
static inline void umka_sys_process_info(int32_t pid, void *param) { static inline void
umka_sys_process_info(int32_t pid, void *param) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -750,7 +786,8 @@ static inline void umka_sys_process_info(int32_t pid, void *param) {
: "memory"); : "memory");
} }
static inline void umka_sys_window_redraw(int begin_end) { static inline void
umka_sys_window_redraw(int begin_end) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -759,8 +796,8 @@ static inline void umka_sys_window_redraw(int begin_end) {
: "memory"); : "memory");
} }
static inline void umka_sys_draw_rect(size_t x, size_t xsize, static inline void
size_t y, size_t ysize, umka_sys_draw_rect(size_t x, size_t xsize, size_t y, size_t ysize,
uint32_t color, int gradient) { uint32_t color, int gradient) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -772,7 +809,8 @@ static inline void umka_sys_draw_rect(size_t x, size_t xsize,
: "memory"); : "memory");
} }
static inline void umka_sys_get_screen_size(uint32_t *xsize, uint32_t *ysize) { static inline void
umka_sys_get_screen_size(uint32_t *xsize, uint32_t *ysize) {
uint32_t xysize; uint32_t xysize;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -783,7 +821,8 @@ static inline void umka_sys_get_screen_size(uint32_t *xsize, uint32_t *ysize) {
*ysize = (xysize & 0xffffu) + 1; *ysize = (xysize & 0xffffu) + 1;
} }
static inline void umka_sys_bg_set_size(uint32_t xsize, uint32_t ysize) { static inline void
umka_sys_bg_set_size(uint32_t xsize, uint32_t ysize) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -794,7 +833,8 @@ static inline void umka_sys_bg_set_size(uint32_t xsize, uint32_t ysize) {
: "memory"); : "memory");
} }
static inline void umka_sys_bg_put_pixel(uint32_t offset, uint32_t color) { static inline void
umka_sys_bg_put_pixel(uint32_t offset, uint32_t color) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -805,7 +845,8 @@ static inline void umka_sys_bg_put_pixel(uint32_t offset, uint32_t color) {
: "memory"); : "memory");
} }
static inline void umka_sys_bg_redraw() { static inline void
umka_sys_bg_redraw() {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -814,7 +855,8 @@ static inline void umka_sys_bg_redraw() {
: "memory"); : "memory");
} }
static inline void umka_sys_bg_set_mode(uint32_t mode) { static inline void
umka_sys_bg_set_mode(uint32_t mode) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -824,8 +866,8 @@ static inline void umka_sys_bg_set_mode(uint32_t mode) {
: "memory"); : "memory");
} }
static inline void umka_sys_bg_put_img(void *image, size_t offset, static inline void
size_t size) { umka_sys_bg_put_img(void *image, size_t offset, size_t size) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -837,7 +879,8 @@ static inline void umka_sys_bg_put_img(void *image, size_t offset,
: "memory"); : "memory");
} }
static inline void *umka_sys_bg_map() { static inline void *
umka_sys_bg_map() {
void *addr; void *addr;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -848,7 +891,8 @@ static inline void *umka_sys_bg_map() {
return addr; return addr;
} }
static inline uint32_t umka_sys_bg_unmap(void *addr) { static inline uint32_t
umka_sys_bg_unmap(void *addr) {
uint32_t status; uint32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -860,7 +904,8 @@ static inline uint32_t umka_sys_bg_unmap(void *addr) {
return status; return status;
} }
static inline void umka_sys_set_cwd(const char *dir) { static inline void
umka_sys_set_cwd(const char *dir) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -870,7 +915,8 @@ static inline void umka_sys_set_cwd(const char *dir) {
: "memory"); : "memory");
} }
static inline void umka_sys_get_cwd(const char *buf, size_t len) { static inline void
umka_sys_get_cwd(const char *buf, size_t len) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -881,9 +927,9 @@ static inline void umka_sys_get_cwd(const char *buf, size_t len) {
: "memory"); : "memory");
} }
static inline void umka_sys_draw_line(size_t x, size_t xend, static inline void
size_t y, size_t yend, umka_sys_draw_line(size_t x, size_t xend, size_t y, size_t yend, uint32_t color,
uint32_t color, int invert) { int invert) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -894,14 +940,12 @@ static inline void umka_sys_draw_line(size_t x, size_t xend,
: "memory"); : "memory");
} }
static inline void umka_sys_display_number(int is_pointer, int base, static inline void
int digits_to_display, int is_qword, umka_sys_display_number(int is_pointer, int base, int digits_to_display,
int show_leading_zeros, int is_qword, int show_leading_zeros,
int number_or_pointer, int number_or_pointer, size_t x, size_t y,
size_t x, size_t y, uint32_t color, int fill_background, int font,
uint32_t color, int fill_background, int draw_to_buffer, int scale_factor,
int font, int draw_to_buffer,
int scale_factor,
uintptr_t background_color_or_buffer) { uintptr_t background_color_or_buffer) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -917,7 +961,8 @@ static inline void umka_sys_display_number(int is_pointer, int base,
: "memory"); : "memory");
} }
static inline void umka_sys_set_button_style(int style) { static inline void
umka_sys_set_button_style(int style) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -927,7 +972,8 @@ static inline void umka_sys_set_button_style(int style) {
: "memory"); : "memory");
} }
static inline void umka_sys_set_window_colors(void *colors) { static inline void
umka_sys_set_window_colors(void *colors) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -938,7 +984,8 @@ static inline void umka_sys_set_window_colors(void *colors) {
: "memory"); : "memory");
} }
static inline void umka_sys_get_window_colors(void *colors) { static inline void
umka_sys_get_window_colors(void *colors) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -949,7 +996,8 @@ static inline void umka_sys_get_window_colors(void *colors) {
: "memory"); : "memory");
} }
static inline uint32_t umka_sys_get_skin_height() { static inline uint32_t
umka_sys_get_skin_height() {
uint32_t skin_height; uint32_t skin_height;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -960,7 +1008,8 @@ static inline uint32_t umka_sys_get_skin_height() {
return skin_height; return skin_height;
} }
static inline void umka_sys_get_screen_area(rect_t *wa) { static inline void
umka_sys_get_screen_area(rect_t *wa) {
uint32_t eax, ebx; uint32_t eax, ebx;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -975,7 +1024,8 @@ static inline void umka_sys_get_screen_area(rect_t *wa) {
wa->bottom = ebx & 0xffffu; wa->bottom = ebx & 0xffffu;
} }
static inline void umka_sys_set_screen_area(rect_t *wa) { static inline void
umka_sys_set_screen_area(rect_t *wa) {
uint32_t ecx, edx; uint32_t ecx, edx;
ecx = (wa->left << 16) + wa->right; ecx = (wa->left << 16) + wa->right;
edx = (wa->top << 16) + wa->bottom; edx = (wa->top << 16) + wa->bottom;
@ -989,7 +1039,8 @@ static inline void umka_sys_set_screen_area(rect_t *wa) {
: "memory"); : "memory");
} }
static inline void umka_sys_get_skin_margins(rect_t *wa) { static inline void
umka_sys_get_skin_margins(rect_t *wa) {
uint32_t eax, ebx; uint32_t eax, ebx;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1004,7 +1055,8 @@ static inline void umka_sys_get_skin_margins(rect_t *wa) {
wa->bottom = ebx & 0xffffu; wa->bottom = ebx & 0xffffu;
} }
static inline int32_t umka_sys_set_skin(const char *path) { static inline int32_t
umka_sys_set_skin(const char *path) {
int32_t status; int32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1016,7 +1068,8 @@ static inline int32_t umka_sys_set_skin(const char *path) {
return status; return status;
} }
static inline int umka_sys_get_font_smoothing() { static inline int
umka_sys_get_font_smoothing() {
int type; int type;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1027,7 +1080,8 @@ static inline int umka_sys_get_font_smoothing() {
return type; return type;
} }
static inline void umka_sys_set_font_smoothing(int type) { static inline void
umka_sys_set_font_smoothing(int type) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -1037,7 +1091,8 @@ static inline void umka_sys_set_font_smoothing(int type) {
: "memory"); : "memory");
} }
static inline int umka_sys_get_font_size() { static inline int
umka_sys_get_font_size() {
uint32_t size; uint32_t size;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1048,7 +1103,8 @@ static inline int umka_sys_get_font_size() {
return size; return size;
} }
static inline void umka_sys_set_font_size(uint32_t size) { static inline void
umka_sys_set_font_size(uint32_t size) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -1058,10 +1114,9 @@ static inline void umka_sys_set_font_size(uint32_t size) {
: "memory"); : "memory");
} }
static inline void umka_sys_put_image_palette(void *image, static inline void
size_t xsize, size_t ysize, umka_sys_put_image_palette(void *image, size_t xsize, size_t ysize,
size_t x, size_t y, size_t x, size_t y, size_t bpp, void *palette,
size_t bpp, void *palette,
size_t row_offset) { size_t row_offset) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"push ebp;" "push ebp;"
@ -1079,8 +1134,8 @@ static inline void umka_sys_put_image_palette(void *image,
: "memory"); : "memory");
} }
static inline void umka_sys_move_window(size_t x, size_t y, static inline void
ssize_t xsize, ssize_t ysize) { umka_sys_move_window(size_t x, size_t y, ssize_t xsize, ssize_t ysize) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -1092,8 +1147,8 @@ static inline void umka_sys_move_window(size_t x, size_t y,
: "memory"); : "memory");
} }
static inline void umka_sys_lfn(void *f7080sXarg, f7080ret_t *r, static inline void
f70or80_t f70or80) { umka_sys_lfn(void *f7080sXarg, f7080ret_t *r, f70or80_t f70or80) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: "=a"(r->status), : "=a"(r->status),
@ -1103,8 +1158,8 @@ static inline void umka_sys_lfn(void *f7080sXarg, f7080ret_t *r,
: "memory"); : "memory");
} }
static inline void umka_sys_set_window_caption(const char *caption, static inline void
int encoding) { umka_sys_set_window_caption(const char *caption, int encoding) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -1115,9 +1170,9 @@ static inline void umka_sys_set_window_caption(const char *caption,
: "memory"); : "memory");
} }
static inline void umka_sys_blit_bitmap(int operation, int background, static inline void
int transparent, int client_relative, umka_sys_blit_bitmap(int operation, int background, int transparent,
void *params) { int client_relative, void *params) {
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
: :
@ -1128,7 +1183,8 @@ static inline void umka_sys_blit_bitmap(int operation, int background,
: "memory"); : "memory");
} }
static inline uint32_t umka_sys_net_get_dev_count() { static inline uint32_t
umka_sys_net_get_dev_count() {
uint32_t count; uint32_t count;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1139,7 +1195,8 @@ static inline uint32_t umka_sys_net_get_dev_count() {
return count; return count;
} }
static inline int32_t umka_sys_net_get_dev_type(uint8_t dev_num) { static inline int32_t
umka_sys_net_get_dev_type(uint8_t dev_num) {
int32_t type; int32_t type;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1150,7 +1207,8 @@ static inline int32_t umka_sys_net_get_dev_type(uint8_t dev_num) {
return type; return type;
} }
static inline int32_t umka_sys_net_get_dev_name(uint8_t dev_num, char *name) { static inline int32_t
umka_sys_net_get_dev_name(uint8_t dev_num, char *name) {
int32_t status; int32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1162,7 +1220,8 @@ static inline int32_t umka_sys_net_get_dev_name(uint8_t dev_num, char *name) {
return status; return status;
} }
static inline int32_t umka_sys_net_dev_reset(uint8_t dev_num) { static inline int32_t
umka_sys_net_dev_reset(uint8_t dev_num) {
int32_t status; int32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1173,7 +1232,8 @@ static inline int32_t umka_sys_net_dev_reset(uint8_t dev_num) {
return status; return status;
} }
static inline int32_t umka_sys_net_dev_stop(uint8_t dev_num) { static inline int32_t
umka_sys_net_dev_stop(uint8_t dev_num) {
int32_t status; int32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1184,7 +1244,8 @@ static inline int32_t umka_sys_net_dev_stop(uint8_t dev_num) {
return status; return status;
} }
static inline intptr_t umka_sys_net_get_dev(uint8_t dev_num) { static inline intptr_t
umka_sys_net_get_dev(uint8_t dev_num) {
intptr_t dev; intptr_t dev;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1195,7 +1256,8 @@ static inline intptr_t umka_sys_net_get_dev(uint8_t dev_num) {
return dev; return dev;
} }
static inline uint32_t umka_sys_net_get_packet_tx_count(uint8_t dev_num) { static inline uint32_t
umka_sys_net_get_packet_tx_count(uint8_t dev_num) {
uint32_t count; uint32_t count;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1206,7 +1268,8 @@ static inline uint32_t umka_sys_net_get_packet_tx_count(uint8_t dev_num) {
return count; return count;
} }
static inline uint32_t umka_sys_net_get_packet_rx_count(uint8_t dev_num) { static inline uint32_t
umka_sys_net_get_packet_rx_count(uint8_t dev_num) {
uint32_t count; uint32_t count;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1217,7 +1280,8 @@ static inline uint32_t umka_sys_net_get_packet_rx_count(uint8_t dev_num) {
return count; return count;
} }
static inline uint32_t umka_sys_net_get_byte_tx_count(uint8_t dev_num) { static inline uint32_t
umka_sys_net_get_byte_tx_count(uint8_t dev_num) {
uint32_t count; uint32_t count;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1228,7 +1292,8 @@ static inline uint32_t umka_sys_net_get_byte_tx_count(uint8_t dev_num) {
return count; return count;
} }
static inline uint32_t umka_sys_net_get_byte_rx_count(uint8_t dev_num) { static inline uint32_t
umka_sys_net_get_byte_rx_count(uint8_t dev_num) {
uint32_t count; uint32_t count;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1239,7 +1304,8 @@ static inline uint32_t umka_sys_net_get_byte_rx_count(uint8_t dev_num) {
return count; return count;
} }
static inline uint32_t umka_sys_net_get_link_status(uint8_t dev_num) { static inline uint32_t
umka_sys_net_get_link_status(uint8_t dev_num) {
uint32_t status; uint32_t status;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1250,8 +1316,8 @@ static inline uint32_t umka_sys_net_get_link_status(uint8_t dev_num) {
return status; return status;
} }
static inline f75ret_t umka_sys_net_open_socket(uint32_t domain, uint32_t type, static inline f75ret_t
uint32_t protocol) { umka_sys_net_open_socket(uint32_t domain, uint32_t type, uint32_t protocol) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1266,7 +1332,8 @@ static inline f75ret_t umka_sys_net_open_socket(uint32_t domain, uint32_t type,
return r; return r;
} }
static inline f75ret_t umka_sys_net_close_socket(uint32_t fd) { static inline f75ret_t
umka_sys_net_close_socket(uint32_t fd) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1279,8 +1346,8 @@ static inline f75ret_t umka_sys_net_close_socket(uint32_t fd) {
return r; return r;
} }
static inline f75ret_t umka_sys_net_bind(uint32_t fd, void *sockaddr, static inline f75ret_t
size_t sockaddr_len) { umka_sys_net_bind(uint32_t fd, void *sockaddr, size_t sockaddr_len) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1295,7 +1362,8 @@ static inline f75ret_t umka_sys_net_bind(uint32_t fd, void *sockaddr,
return r; return r;
} }
static inline f75ret_t umka_sys_net_listen(uint32_t fd, uint32_t backlog) { static inline f75ret_t
umka_sys_net_listen(uint32_t fd, uint32_t backlog) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1309,8 +1377,8 @@ static inline f75ret_t umka_sys_net_listen(uint32_t fd, uint32_t backlog) {
return r; return r;
} }
static inline f75ret_t umka_sys_net_connect(uint32_t fd, void *sockaddr, static inline f75ret_t
size_t sockaddr_len) { umka_sys_net_connect(uint32_t fd, void *sockaddr, size_t sockaddr_len) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1325,8 +1393,8 @@ static inline f75ret_t umka_sys_net_connect(uint32_t fd, void *sockaddr,
return r; return r;
} }
static inline f75ret_t umka_sys_net_accept(uint32_t fd, void *sockaddr, static inline f75ret_t
size_t sockaddr_len) { umka_sys_net_accept(uint32_t fd, void *sockaddr, size_t sockaddr_len) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1341,8 +1409,8 @@ static inline f75ret_t umka_sys_net_accept(uint32_t fd, void *sockaddr,
return r; return r;
} }
static inline f75ret_t umka_sys_net_send(uint32_t fd, void *buf, static inline f75ret_t
size_t buf_len, uint32_t flags) { umka_sys_net_send(uint32_t fd, void *buf, size_t buf_len, uint32_t flags) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1358,8 +1426,8 @@ static inline f75ret_t umka_sys_net_send(uint32_t fd, void *buf,
return r; return r;
} }
static inline f75ret_t umka_sys_net_receive(uint32_t fd, void *buf, static inline f75ret_t
size_t buf_len, uint32_t flags) { umka_sys_net_receive(uint32_t fd, void *buf, size_t buf_len, uint32_t flags) {
f75ret_t r; f75ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1375,7 +1443,8 @@ static inline f75ret_t umka_sys_net_receive(uint32_t fd, void *buf,
return r; return r;
} }
static inline f76ret_t umka_sys_net_eth_read_mac(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_eth_read_mac(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1390,7 +1459,8 @@ static inline f76ret_t umka_sys_net_eth_read_mac(uint32_t dev_num) {
// Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent = // Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent =
// Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd = // Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd =
static inline f76ret_t umka_sys_net_ipv4_get_addr(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_ipv4_get_addr(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1402,8 +1472,8 @@ static inline f76ret_t umka_sys_net_ipv4_get_addr(uint32_t dev_num) {
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_set_addr(uint32_t dev_num, static inline f76ret_t
uint32_t addr) { umka_sys_net_ipv4_set_addr(uint32_t dev_num, uint32_t addr) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1416,7 +1486,8 @@ static inline f76ret_t umka_sys_net_ipv4_set_addr(uint32_t dev_num,
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_get_dns(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_ipv4_get_dns(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1428,8 +1499,8 @@ static inline f76ret_t umka_sys_net_ipv4_get_dns(uint32_t dev_num) {
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_set_dns(uint32_t dev_num, static inline f76ret_t
uint32_t dns) { umka_sys_net_ipv4_set_dns(uint32_t dev_num, uint32_t dns) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1442,7 +1513,8 @@ static inline f76ret_t umka_sys_net_ipv4_set_dns(uint32_t dev_num,
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_get_subnet(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_ipv4_get_subnet(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1454,8 +1526,8 @@ static inline f76ret_t umka_sys_net_ipv4_get_subnet(uint32_t dev_num) {
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_set_subnet(uint32_t dev_num, static inline f76ret_t
uint32_t subnet) { umka_sys_net_ipv4_set_subnet(uint32_t dev_num, uint32_t subnet) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1468,7 +1540,8 @@ static inline f76ret_t umka_sys_net_ipv4_set_subnet(uint32_t dev_num,
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_get_gw(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_ipv4_get_gw(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1480,8 +1553,8 @@ static inline f76ret_t umka_sys_net_ipv4_get_gw(uint32_t dev_num) {
return r; return r;
} }
static inline f76ret_t umka_sys_net_ipv4_set_gw(uint32_t dev_num, static inline f76ret_t
uint32_t gw) { umka_sys_net_ipv4_set_gw(uint32_t dev_num, uint32_t gw) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1502,7 +1575,8 @@ static inline f76ret_t umka_sys_net_ipv4_set_gw(uint32_t dev_num,
// Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd == // Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd ==
// Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent == // Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent ==
// Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd == // Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd ==
static inline f76ret_t umka_sys_net_arp_get_count(uint32_t dev_num) { static inline f76ret_t
umka_sys_net_arp_get_count(uint32_t dev_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1514,9 +1588,8 @@ static inline f76ret_t umka_sys_net_arp_get_count(uint32_t dev_num) {
return r; return r;
} }
static inline f76ret_t umka_sys_net_arp_get_entry(uint32_t dev_num, static inline f76ret_t
uint32_t arp_num, umka_sys_net_arp_get_entry(uint32_t dev_num, uint32_t arp_num, void *buf) {
void *buf) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1530,8 +1603,8 @@ static inline f76ret_t umka_sys_net_arp_get_entry(uint32_t dev_num,
return r; return r;
} }
static inline f76ret_t umka_sys_net_arp_add_entry(uint32_t dev_num, static inline f76ret_t
void *buf) { umka_sys_net_arp_add_entry(uint32_t dev_num, void *buf) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"
@ -1544,8 +1617,8 @@ static inline f76ret_t umka_sys_net_arp_add_entry(uint32_t dev_num,
return r; return r;
} }
static inline f76ret_t umka_sys_net_arp_del_entry(uint32_t dev_num, static inline f76ret_t
int32_t arp_num) { umka_sys_net_arp_del_entry(uint32_t dev_num, int32_t arp_num) {
f76ret_t r; f76ret_t r;
__asm__ __inline__ __volatile__ ( __asm__ __inline__ __volatile__ (
"call i40" "call i40"

View File

@ -36,7 +36,8 @@
#define DIRENTS_TO_READ 100 #define DIRENTS_TO_READ 100
static void bdfe_to_stat(bdfe_t *kf, struct stat *st) { static void
bdfe_to_stat(bdfe_t *kf, struct stat *st) {
// if (kf->attr & KF_FOLDER) { // if (kf->attr & KF_FOLDER) {
if (st) { if (st) {
st->st_mode = S_IFDIR | 0755; st->st_mode = S_IFDIR | 0755;
@ -51,15 +52,15 @@ static void bdfe_to_stat(bdfe_t *kf, struct stat *st) {
st->st_ctime = kos_time_to_epoch(&(kf->ctime)); st->st_ctime = kos_time_to_epoch(&(kf->ctime));
} }
static void *umka_fuse_init(struct fuse_conn_info *conn, static void *
struct fuse_config *cfg) { umka_fuse_init(struct fuse_conn_info *conn, struct fuse_config *cfg) {
(void) conn; (void) conn;
cfg->kernel_cache = 1; cfg->kernel_cache = 1;
return NULL; return NULL;
} }
static int umka_getattr(const char *path, struct stat *stbuf, static int
struct fuse_file_info *fi) { umka_getattr(const char *path, struct stat *stbuf, struct fuse_file_info *fi) {
(void) fi; (void) fi;
int res = 0; int res = 0;
@ -80,14 +81,15 @@ static int umka_getattr(const char *path, struct stat *stbuf,
return res; return res;
} }
static int umka_readdir(const char *path, void *buf, fuse_fill_dir_t filler, static int
off_t offset, struct fuse_file_info *fi, umka_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset,
enum fuse_readdir_flags flags) { struct fuse_file_info *fi, enum fuse_readdir_flags flags) {
(void) offset; // TODO (void) offset; // TODO
(void) fi; (void) fi;
(void) flags; (void) flags;
f7080s1info_t *dir = (f7080s1info_t*)malloc(sizeof(f7080s1info_t) + BDFE_LEN_UNICODE * DIRENTS_TO_READ); f7080s1info_t *dir = (f7080s1info_t*)malloc(sizeof(f7080s1info_t) +
BDFE_LEN_UNICODE * DIRENTS_TO_READ);
f7080s1arg_t fX0 = {.sf = 1, f7080s1arg_t fX0 = {.sf = 1,
.offset = 0, .offset = 0,
.encoding = UTF8, .encoding = UTF8,
@ -109,7 +111,8 @@ static int umka_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
return 0; return 0;
} }
static int umka_open(const char *path, struct fuse_file_info *fi) { static int
umka_open(const char *path, struct fuse_file_info *fi) {
// if (strcmp(path+1, "blah") != 0) // if (strcmp(path+1, "blah") != 0)
// return -ENOENT; // return -ENOENT;
(void) path; (void) path;
@ -120,11 +123,13 @@ static int umka_open(const char *path, struct fuse_file_info *fi) {
return 0; return 0;
} }
static int umka_read(const char *path, char *buf, size_t size, off_t offset, static int
umka_read(const char *path, char *buf, size_t size, off_t offset,
struct fuse_file_info *fi) { struct fuse_file_info *fi) {
(void) fi; (void) fi;
f7080s0arg_t fX0 = {.sf = 0, .offset = offset, .count = size, .buf = buf, .u = {.f80 = {.path_encoding = UTF8, .path = path}}}; f7080s0arg_t fX0 = {.sf = 0, .offset = offset, .count = size, .buf = buf,
.u = {.f80 = {.path_encoding = UTF8, .path = path}}};
f7080ret_t r; f7080ret_t r;
umka_sys_lfn(&fX0, &r, F80); umka_sys_lfn(&fX0, &r, F80);
return size; return size;
@ -138,7 +143,8 @@ static struct fuse_operations umka_oper = {
.read = umka_read, .read = umka_read,
}; };
int main(int argc, char *argv[]) { int
main(int argc, char *argv[]) {
umka_tool = UMKA_FUSE; umka_tool = UMKA_FUSE;
if (argc != 3) { if (argc != 3) {
printf("usage: umka_fuse dir img\n"); printf("usage: umka_fuse dir img\n");

View File

@ -1,3 +1,5 @@
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -9,14 +11,14 @@
#include <sys/types.h> #include <sys/types.h>
#include "umka.h" #include "umka.h"
#include "shell.h" #include "shell.h"
#include "trace.h"
#define MONITOR_THREAD_STACK_SIZE 0x100000 #define THREAD_STACK_SIZE 0x100000
void monitor() { static void
monitor(void) {
umka_sti(); umka_sti();
fprintf(stderr, "Start monitor thread\n"); fprintf(stderr, "Start monitor thread\n");
// mkfifo("/tmp/umka.fifo.2u", 0644);
// mkfifo("/tmp/umka.fifo.4u", 0644);
FILE *fin = fopen("/tmp/umka.fifo.2u", "r"); FILE *fin = fopen("/tmp/umka.fifo.2u", "r");
FILE *fout = fopen("/tmp/umka.fifo.4u", "w"); FILE *fout = fopen("/tmp/umka.fifo.4u", "w");
if (!fin || !fout) { if (!fin || !fout) {
@ -26,16 +28,60 @@ void monitor() {
run_test(fin, fout, 0); run_test(fin, fout, 0);
} }
void restart_timer(void);
void umka_thread_ping(void); void umka_thread_ping(void);
void umka_thread_net_drv(void); void umka_thread_net_drv(void);
struct itimerval timeout = {.it_value = {.tv_sec = 0, .tv_usec = 10000}, struct itimerval timeout = {.it_value = {.tv_sec = 0, .tv_usec = 10000},
.it_interval = {.tv_sec = 0, .tv_usec = 10000}}; .it_interval = {.tv_sec = 0, .tv_usec = 10000}};
int main() { static void
thread_start(int is_kernel, void (*entry)(void), size_t stack_size) {
uint8_t *stack = malloc(stack_size);
umka_new_sys_threads(is_kernel, entry, stack + stack_size);
}
/*
can't get pty working
may be because of my custom threads and blocking, don't know
void new_monitor(void) {
umka_sti(); umka_sti();
fprintf(stderr, "Start monitor thread\n");
int mpty = posix_openpt(O_RDWR | O_NOCTTY);
if (mpty == -1) {
perror("open master pty");
return;
}
if (grantpt(mpty) == -1) {
perror("grantpt");
return;
}
if (unlockpt(mpty) == -1) {
perror("unlockpt");
return;
}
char *spty_name = ptsname(mpty);
if (spty_name == NULL) {
perror("open slave pty");
return;
}
fprintf(stderr, "[os] pty=%s\n", spty_name);
FILE *fmpty = fdopen(mpty, "r+");
if (fmpty == NULL) {
perror("fdopen mpty");
return;
}
run_test(fmpty, fmpty, 0);
}
*/
int
main() {
if (coverage)
trace_begin();
umka_tool = UMKA_OS; umka_tool = UMKA_OS;
umka_sti();
struct sigaction sa; struct sigaction sa;
sa.sa_sigaction = irq0; sa.sa_sigaction = irq0;
@ -58,18 +104,17 @@ int main() {
umka_init(); umka_init();
umka_stack_init(); umka_stack_init();
uint8_t *monitor_stack = malloc(MONITOR_THREAD_STACK_SIZE);
umka_new_sys_threads(0, monitor, monitor_stack + MONITOR_THREAD_STACK_SIZE);
uint8_t *net_drv_stack = malloc(MONITOR_THREAD_STACK_SIZE); thread_start(0, monitor, THREAD_STACK_SIZE);
umka_new_sys_threads(0, umka_thread_net_drv, net_drv_stack + MONITOR_THREAD_STACK_SIZE); thread_start(0, umka_thread_net_drv, THREAD_STACK_SIZE);
// thread_start(0, umka_thread_ping, THREAD_STACK_SIZE);
uint8_t *ping_stack = malloc(MONITOR_THREAD_STACK_SIZE);
umka_new_sys_threads(0, umka_thread_ping, ping_stack + MONITOR_THREAD_STACK_SIZE);
setitimer(ITIMER_PROF, &timeout, NULL); setitimer(ITIMER_PROF, &timeout, NULL);
kos_osloop(); // doesn't return kos_osloop(); // doesn't return
if (coverage)
trace_end();
return 0; return 0;
} }

View File

@ -38,7 +38,6 @@
#include <unistd.h> #include <unistd.h>
#include "shell.h" #include "shell.h"
#include "umka.h" #include "umka.h"
#include "trace.h"
#include "vnet.h" #include "vnet.h"
uint8_t packet[4096] = {0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 'a','b', uint8_t packet[4096] = {0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 'a','b',
@ -46,7 +45,8 @@ uint8_t packet[4096] = {0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 'a','b',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5'}; 'y', 'z', '0', '1', '2', '3', '4', '5'};
int tap_alloc(char *dev) { static int
tap_alloc(char *dev) {
int flags = IFF_TAP | IFF_NO_PI; int flags = IFF_TAP | IFF_NO_PI;
struct ifreq ifr; struct ifreq ifr;
int fd, err; int fd, err;
@ -79,21 +79,17 @@ int tap_alloc(char *dev) {
return fd; return fd;
} }
int tapfd; int go_ping = 0;
_Atomic int go_ping = 0;
int umka_thread_ping(void) { void
umka_thread_ping(void) {
umka_sti(); umka_sti();
while (!go_ping) { /* wait until initialized */ } while (!go_ping) { /* wait until initialized */ }
fprintf(stderr, "[ping] tapfd is %i\n", tapfd);
if (coverage)
trace_begin();
f75ret_t r75; f75ret_t r75;
r75 = umka_sys_net_open_socket(AF_INET4, SOCK_STREAM, IPPROTO_TCP); r75 = umka_sys_net_open_socket(AF_INET4, SOCK_STREAM, IPPROTO_TCP);
if (r75.errorcode == (uint32_t)-1) { if (r75.value == (uint32_t)-1) {
fprintf(stderr, "[ping] error\n"); fprintf(stderr, "[ping] open error %u\n", r75.errorcode);
exit(1); exit(1);
} }
uint32_t sockfd = r75.value; uint32_t sockfd = r75.value;
@ -111,28 +107,27 @@ int umka_thread_ping(void) {
sa.sin_addr.s_addr = addr; sa.sin_addr.s_addr = addr;
r75 = umka_sys_net_connect(sockfd, &sa, sizeof(struct sockaddr_in)); r75 = umka_sys_net_connect(sockfd, &sa, sizeof(struct sockaddr_in));
if (r75.errorcode == (uint32_t)-1) { if (r75.value == (uint32_t)-1) {
fprintf(stderr, "[ping] error %u\n", r75.errorcode); fprintf(stderr, "[ping] connect error %u\n", r75.errorcode);
exit(1); return;
} }
r75 = umka_sys_net_send(sockfd, packet, 128, 0); r75 = umka_sys_net_send(sockfd, packet, 128, 0);
if (r75.errorcode == (uint32_t)-1) { if (r75.value == (uint32_t)-1) {
fprintf(stderr, "[ping] error %u\n", r75.errorcode); fprintf(stderr, "[ping] send error %u\n", r75.errorcode);
exit(1); return;
} }
if (coverage)
trace_end();
while (true) {} while (true) {}
return 0; return;
} }
void umka_thread_net_drv(void) { void
umka_thread_net_drv(void) {
umka_sti(); umka_sti();
fprintf(stderr, "[net_drv] starting\n"); fprintf(stderr, "[net_drv] starting\n");
int tapfd;
uint8_t buffer[2048]; uint8_t buffer[2048];
int plen = 0; int plen = 0;
char tapdev[IFNAMSIZ] = "tap0"; char tapdev[IFNAMSIZ] = "tap0";
@ -145,33 +140,33 @@ void umka_thread_net_drv(void) {
umka_sys_net_dev_reset(i); umka_sys_net_dev_reset(i);
umka_sys_net_get_dev_name(i, devname); umka_sys_net_get_dev_name(i, devname);
uint32_t devtype = umka_sys_net_get_dev_type(i); uint32_t devtype = umka_sys_net_get_dev_type(i);
printf("[net_drv] device %i: %s %u\n", i, devname, devtype); fprintf(stderr, "[net_drv] device %i: %s %u\n", i, devname, devtype);
} }
f76ret_t r76; f76ret_t r76;
r76 = umka_sys_net_ipv4_set_subnet(1, inet_addr("255.255.255.0")); r76 = umka_sys_net_ipv4_set_subnet(1, inet_addr("255.255.255.0"));
if (r76.eax == (uint32_t)-1) { if (r76.eax == (uint32_t)-1) {
fprintf(stderr, "[net_drv] error\n"); fprintf(stderr, "[net_drv] set subnet error\n");
exit(1); return;
} }
// r76 = umka_sys_net_ipv4_set_gw(1, inet_addr("192.168.1.1")); // r76 = umka_sys_net_ipv4_set_gw(1, inet_addr("192.168.1.1"));
r76 = umka_sys_net_ipv4_set_gw(1, inet_addr("10.50.0.1")); r76 = umka_sys_net_ipv4_set_gw(1, inet_addr("10.50.0.1"));
if (r76.eax == (uint32_t)-1) { if (r76.eax == (uint32_t)-1) {
fprintf(stderr, "error\n"); fprintf(stderr, "set gw error\n");
exit(1); return;
} }
r76 = umka_sys_net_ipv4_set_dns(1, inet_addr("217.10.36.5")); r76 = umka_sys_net_ipv4_set_dns(1, inet_addr("217.10.36.5"));
if (r76.eax == (uint32_t)-1) { if (r76.eax == (uint32_t)-1) {
fprintf(stderr, "[net_drv] error\n"); fprintf(stderr, "[net_drv] set dns error\n");
exit(1); return;
} }
r76 = umka_sys_net_ipv4_set_addr(1, inet_addr("10.50.0.2")); r76 = umka_sys_net_ipv4_set_addr(1, inet_addr("10.50.0.2"));
if (r76.eax == (uint32_t)-1) { if (r76.eax == (uint32_t)-1) {
fprintf(stderr, "[net_drv] error\n"); fprintf(stderr, "[net_drv] set ip addr error\n");
exit(1); return;
} }
go_ping = 1; go_ping = 1;

View File

@ -29,7 +29,8 @@
#include "umka.h" #include "umka.h"
#include "trace.h" #include "trace.h"
int main(int argc, char **argv) { int
main(int argc, char **argv) {
umka_tool = UMKA_SHELL; umka_tool = UMKA_SHELL;
const char *usage = \ const char *usage = \
"usage: umka_shell [test_file.t] [-c]\n" "usage: umka_shell [test_file.t] [-c]\n"