1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:38:11 +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:
Andreas Kling 2019-01-14 14:21:51 +01:00
parent b4da4e8fbd
commit b0e3f73375
46 changed files with 283 additions and 292 deletions

View file

@ -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;
}