Age | Commit message (Collapse) | Author | |
---|---|---|---|
2019-01-16 | Add a PTY multiplexer (/dev/ptmx) device. | Andreas Kling | |
When you open /dev/ptmx, you get a file descriptor pointing to one of the available MasterPTY's. If none are available, you get an EBUSY. This makes it possible to open multiple (up to 4) Terminals. :^) To support this, I also added a CharacterDevice::open() that gets control when VFS is opening a CharacterDevice. This is useful when we want to return a custom FileDescriptor like we do here. | |||
2019-01-16 | Get rid of Vnode concept. | Andreas Kling | |
We already have an abstraction between Process and Inode/CharacterDevice/FIFO and it's called FileDescriptor. :^) | |||
2019-01-16 | Let each MasterPTY create its slave. | Andreas Kling | |
2019-01-16 | Catch anyone trying to use a DoubleBuffer with interrupts disabled. | Andreas Kling | |
2019-01-16 | Use a CircularQueue for the PS/2 mouse driver. | Andreas Kling | |
2019-01-16 | Rename FileDescriptor::has_data_available_for_reading() -> can_read(). | Andreas Kling | |
2019-01-16 | Tidy up memory map a bit and write out the general map in MemoryManager. | Andreas Kling | |
There was a bug that given enough supervisor page allocation, we would eventually start dipping into the kmalloc range. | |||
2019-01-16 | Pass the process to CharacterDevice::read/write. | Andreas Kling | |
This is much nicer than grabbing directly at 'current' inside a read(). | |||
2019-01-16 | Rename CharacterDevice::has_data_available_for_reading() -> can_read(). | Andreas Kling | |
2019-01-16 | Implement basic support for POSIX-style select(). | Andreas Kling | |
Now we can block on both the PTY *and* the GUI event stream in Terminal. | |||
2019-01-15 | Oops, finish WindowServer rename. | Andreas Kling | |
2019-01-15 | Add internal locking to DoubleBuffer. | Andreas Kling | |
2019-01-15 | Rename WindowComposer -> WindowServer. | Andreas Kling | |
I keep referring to it as the windowing server anyway. | |||
2019-01-15 | Allow character devices to block write attempts until there is more space. | Andreas Kling | |
2019-01-15 | Make it possible for a process to switch controlling terminals. | Andreas Kling | |
Via the TIOCSCTTY and TIOCNOTTY ioctls. | |||
2019-01-15 | Slap an InterruptDisabler on gui$invalidate_window(). | Andreas Kling | |
This is obviously not a permanent solution but it works now to allow the windowing system to withstand invalidation spam. | |||
2019-01-15 | Let's do dword-at-a-time memcpy() and memset() in userspace as well. | Andreas Kling | |
Also fix a dumb bug that showed up when I was memsetting something other than zeroes. | |||
2019-01-15 | Add very basic KeyDown events to the GUI event stream. | Andreas Kling | |
The Terminal program now hosts an interactive shell. :^) | |||
2019-01-15 | Let's just assume we have 32MB of physical memory to work with. | Andreas Kling | |
I should eventually figure out the exact amount of memory but not now. | |||
2019-01-15 | Add basic PTY support. | Andreas Kling | |
For now, there are four hard-coded PTYs: /dev/pt{m,s}[0123] Use this in the Terminal to open a pty pair and spawn a shell. | |||
2019-01-15 | Start working on a graphical Terminal program. | Andreas Kling | |
2019-01-14 | Build Painter & friends into LibC. Use it in the GUI test app. | Andreas Kling | |
2019-01-14 | Share GraphicsBitmaps between the windowing server and the client process. | Andreas Kling | |
This is pretty cool. :^) GraphicsBitmaps are now mapped into both the server and the client address space (usually at different addresses but that doesn't matter.) Added a GUI syscall for getting a window's backing store, and another one for invalidating a window so that the server redraws it. | |||
2019-01-14 | Start refactoring the windowing system to use an event loop. | Andreas Kling | |
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. | |||
2019-01-14 | TTY::write() should return the number of bytes written. | Andreas Kling | |
2019-01-13 | gui$create_widget() shouldn't try to make button corners opaque. | Andreas Kling | |
2019-01-13 | Let's use the existing Rect and Color types in the GUI API. | Andreas Kling | |
Any type that doesn't depend on indirect data can probably be used here. | |||
2019-01-13 | Add basic GUI API for creating labels and buttons. | Andreas Kling | |
2019-01-13 | Fix Userland build. | Andreas Kling | |
2019-01-13 | Start working on a GUI kernel API. | Andreas Kling | |
2019-01-13 | Make GraphicsBitmaps be Region-backed when running in the kernel. | Andreas Kling | |
This is a lot better than having them in kmalloc memory. I'm gonna need a way to keep track of which process owns which bitmap eventually, maybe through some sort of resource keying system. We'll see. | |||
2019-01-12 | Don't use dword-by-dword memset/memcpy if the addresses are unaligned. | Andreas Kling | |
Also don't enable the large kmalloc catcher by default. | |||
2019-01-12 | Paper over a race in DoubleBuffer. | Andreas Kling | |
I'm still somewhat okay throwing InterruptDisabler at races as they screw me. Eventually I'm gonna have to devise a different strategy though. | |||
2019-01-12 | Print process name and PID when kmalloc() panics. | Andreas Kling | |
2019-01-12 | Optimize WindowManager::flush() with fast_dword_copy(). | Andreas Kling | |
2019-01-12 | Make the kernel's memcpy() and memset() go fast with dword copies. | Andreas Kling | |
Also I learned that the ABI allows us to assume DF=0 on function entry. | |||
2019-01-12 | All right, let's double buffer the display. It looks so much better. | Andreas Kling | |
This performs like dogshit. I need to make some optimizations. :^) | |||
2019-01-12 | Make PS2MouseDevice behave more like a proper character device. | Andreas Kling | |
Get rid of the goofy MouseClient interface and have the GUI event loop just read mouse data from the character device. The previous approach was awful as it was sending us into random GUI code in the mouse interrupt handler. | |||
2019-01-12 | Get rid of the "root widget" concept in WindowManager. | Andreas Kling | |
Instead just create a GraphicsBitmap wrapper around the display framebuffer and teach Painter how to draw directly into a GraphicsBitmap. | |||
2019-01-12 | Reduce PS2MouseDevice debug spam in every dang mouse interrupt. | Andreas Kling | |
2019-01-12 | Make the kernel's memset do a "rep stosb" because. | Andreas Kling | |
2019-01-11 | Hook up the Keyboard device to the AbstractScreen. | Andreas Kling | |
Basic text editing in a TextBox works. How very cool :^) | |||
2019-01-11 | Throw up some widgets on screen so we can see what they look like. | Andreas Kling | |
2019-01-11 | Hook up the PS2MouseDevice to the AbstractScreen+WindowManager. | Andreas Kling | |
Render the mouse cursor by xor'ing the pixels. I don't know anything about hardware cursors yet and this way we don't need to recompose the window hierarchy every time you move the mouse. :^) | |||
2019-01-11 | Teach PS2MouseDevice to read the left and right buttons. | Andreas Kling | |
2019-01-11 | Add a simple PS/2 mouse device. | Andreas Kling | |
It's not hooked up to anything just yet, but it does read movement deltas. | |||
2019-01-11 | Fix uninitialized AbstractScreen instance pointer. | Andreas Kling | |
...yeah yeah, one day I'm gonna zero out the kernel's BSS segment. Soon.. | |||
2019-01-10 | Hook everything up to run the GUI on top of the kernel. | Andreas Kling | |
Okay things kinda sorta work. Both Bochs and QEMU now boot into GUI mode. There's a ton of stuff that doesn't make sense and so many things to rework. Still it's quite cool to have made it this far. :^) | |||
2019-01-10 | Make Widgets/ build inside the kernel. | Andreas Kling | |
2019-01-09 | Switch into 1024x768x32bpp VESA LFB mode at boot. | Andreas Kling | |
This is going to be pretty cool once I can hook up the Widgets/ code to it. |