mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 04:27:45 +00:00
Start refactoring the windowing system to use an event loop.
Userspace programs can now open /dev/gui_events and read a stream of GUI_Event structs one at a time. I was stuck on a stupid problem where we'd reenter Scheduler::yield() due to having one of the has_data_available_for_reading() implementations using locks.
This commit is contained in:
parent
b4da4e8fbd
commit
b0e3f73375
46 changed files with 283 additions and 292 deletions
|
@ -43,7 +43,6 @@
|
|||
__ERROR(EAFNOSUPPORT, "Address family not supported") \
|
||||
__ERROR(EWHYTHO, "Failed without setting an error code (Bug!)") \
|
||||
__ERROR(EBADWINDOW, "Bad Window ID") \
|
||||
__ERROR(EBADWIDGET, "Bad Widget ID") \
|
||||
|
||||
enum __errno_values {
|
||||
#undef __ERROR
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <AK/printf.cpp>
|
||||
#include <Kernel/Syscall.h>
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
@ -225,6 +226,20 @@ void rewind(FILE* stream)
|
|||
}
|
||||
|
||||
static void sys_putch(char*&, char ch)
|
||||
{
|
||||
syscall(SC_putch, ch);
|
||||
}
|
||||
|
||||
int sys_printf(const char* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
int ret = printfInternal(sys_putch, nullptr, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void stdout_putch(char*&, char ch)
|
||||
{
|
||||
putchar(ch);
|
||||
}
|
||||
|
@ -254,7 +269,7 @@ int printf(const char* fmt, ...)
|
|||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
int ret = printfInternal(sys_putch, nullptr, fmt, ap);
|
||||
int ret = printfInternal(stdout_putch, nullptr, fmt, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ int vfprintf(FILE*, const char* fmt, va_list);
|
|||
int vsprintf(char* buffer, const char* fmt, va_list);
|
||||
int fprintf(FILE*, const char* fmt, ...);
|
||||
int printf(const char* fmt, ...);
|
||||
int sys_printf(const char* fmt, ...);
|
||||
int sprintf(char* buffer, const char* fmt, ...);
|
||||
int putchar(int ch);
|
||||
int putc(int ch, FILE*);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue