Commit Graph

78 Commits

Author SHA1 Message Date
Kevin Lange
5f17cbc27f primitive scrollback support in terminal 2012-12-09 19:57:04 -08:00
Kevin Lange
69426c90a1 Change the way the terminal resize escape operates
It now takes sizes in cells and calculates the correct window size.

Thus, \033[3000;127;45z should set the terminal to the "standard" size
available in 1024x768 full-screen mode, and which is specified in the
terminfo file provide.
2012-12-01 00:10:59 -08:00
Kevin Lange
c6daef72a3 Major terminal improvements.
* Speed improvements
* Crash fixers
* Significant overhaul to escape handling based on extensive use of the
  new serial console and a remote connection to a Linux box.
* Updated included terminfo file to accurately reflect terminal
  behavior.

Some fun facts:
* vim runs great on a remote console (though the serial line slows a lot
  of things down, it still runs rather smoothly)
* going to fix GNU screen, maybe in next commit, dunno
* tested with htop, less, and a bunch of other stuff
2012-11-30 23:28:49 -08:00
Kevin Lange
659d044614 Terminal fixes 2012-11-30 15:50:06 -08:00
Kevin Lange
ed5b9543fb Big commit: Serial console
* fix some terminal bugs (some, not all)
* add a serial device to the VFS
* fix up serial so it works better
* add a serial-console application
* fix a bug in some other stuff relating to allocations
* change size of the terminal described by toaru.terminfo
* adds a new system call
2012-11-28 23:05:19 -08:00
Kevin Lange
ae6b72606b General support for focused/inactive windows 2012-11-19 21:24:21 -08:00
Kevin Lange
07a5ee3c55 Brand new, super-great window decorations 2012-11-18 20:41:30 -08:00
Kevin Lange
8c1a213696 Fix VGA terminal bug (and tests) 2012-10-15 23:49:56 -07:00
Kevin Lange
7d5eb42400 Userspace keyboard handling
Kernel driver sends raw scancodes, compositor or terminal handle the
rest. Support for F* keys will be added soon, in the mean time userspace
applications can know about the status of modifiers (control, shift,
alt, and super).

Compositor actions have been changed to Alt+Left Click for move and
Alt+Middle Click for resize. I'll work on adding more mouse events once
I get them to be faster (they're annoyingly slow at the moment... I want
more accuracy and less latency).
2012-10-14 19:53:16 -07:00
Kevin Lange
d56ba02437 Resizing is working okay. 2012-10-13 13:02:58 -07:00
Kevin Lange
0387b2d2c3 Allow windows to disable alpha transparency.
Also add functionality to the terminal to toggle it on and off.
There's a small, but nice-to-have performance increase from disabling
alpha transparency in the terminal.

Also, the display server sets DISPLAY=... to the shmem endpoint for the
compositor, so if getenv("DISPLAY") returns a pointer, you can assume
you are in a graphical environment, instead of having to rely on things
like arguments. Good for those applications that want to be able to run
both full-screen and windowed.
2012-10-11 23:55:53 -07:00
Kevin Lange
5249138dcd Environment variables, integrated with newlib.
* Patched crt0 to support a pre_main
* pre_main sets up environment variables, can do other things later,
  but then just jumps to main with the same arguments.
* Updated a bunch of apps to pass environment variables around.
2012-10-08 00:17:50 -07:00
Kevin Lange
484cf903cd Fixes for multiline history
(Also fixed a bug with backspace handling in the terminal)
2012-10-07 12:22:39 -07:00
Kevin Lange
4c67b5da84 Completely rewrote compositing engine
The compositor itself still needs work, but the compositing engine
within now does full blitting and is faster than the old method.
Transparency is now supported properly, though telling the compositor to
use it on a window will degrade performance. One terminal is usually
okay, and everything runs faster than it did before; two terminals is
pushing it; three will make you very sad. The stacking logic has also
been updated. Presumably, alpha blitting for transparent windows could
be done with SIMD instructions and be extremely fast.

All graphics libraries have also been updated to (hopefully) work
properly with alpha bits.
2012-09-13 22:12:47 -07:00
Kevin Lange
b4ae49b056 Graphical Login Manager (without the login part)
* Some-what managed sessions
* Cool fade in effect from the bootscreen
* Not terribly unawesome rendering of everything else
2012-09-12 22:10:10 -07:00
Kevin Lange
994af55611 PNG wallpapers; compositor bug fixes; oh my!
* Fresh new wallpaper as a PNG from gnome-look:
  http://gnome-look.org/content/show.php/Echo?content=137142
  (By user hyperdude111, released as "do whatever you want")
* Terminal bug fix for --geometry option, which was derping on height
  vs. width.
* Compositor bug fix for wallpaper app not showing up at the bottom.
  Fixed by doing a better job of reordering the windows on a REORDER
  call (which we weren't actually doing).
2012-09-12 20:10:48 -07:00
Kevin Lange
3a5fda0d9c Super fast terminal scrolling.
* Uses memmove to shift terminal cells and graphics memory.
* Can cat cat super-fast!

Verified in windowed, fullscreen, and VGA modes.

[ci skip]
2012-09-10 23:42:45 -07:00
Kevin Lange
3a62d779f0 Include a working implementation of wcwidth()
Terminal and Bim both use this third-party implementation of wcwidth()
Please see the README for copyright and license information.

[ci skip]
2012-09-08 16:47:43 -07:00
Kevin Lange
d2374903f1 This is Bim, a Bad IMitation of Vim.
It's an editor, but it is incomplete. For example, write is not
supported yet, so you can open existing files and make modifications,
but you can not save them. Use it as a fun little scratchpad, I guess.
2012-09-08 01:47:19 -07:00
Kevin Lange
ea1146ea17 More minor fixes to the terminal 2012-09-08 00:17:43 -07:00
Kevin Lange
af6be648d4 A lot of refactoring 2012-09-07 20:17:00 -07:00
Kevin Lange
12bf07364c Pull the font and palette out of the terminal code
Honestly, the latter should be configurable to an extent.

[ci skip]
2012-09-06 19:46:36 -07:00
Kevin Lange
7939ccb93f Minor bugfixes and readme updates.
[ci skip]
2012-09-06 14:54:05 -07:00
Kevin Lange
9948dcc4c3 Add a hacky method to get the terminal dimensions
\033[1003z will stuff them into stdin like 80,24.
This is a hack, just like the "disable local echo" hack used for
passwords and it should, ideally, be replaced with a proper system as
defined in POSIX for terminal control, but for, it works, and that's
pretty cool because it means `ls` can stop being stupid.
2012-09-05 22:47:52 -07:00
Kevin Lange
1a1a8bcdad Fix redrawing and scrolling for wide chars
[ci skip]
2012-09-05 20:42:54 -07:00
Kevin Lange
ac52d41144 Unicode Text Support
* Some applications now support UTF-8 text through the use of a very
  simple decoder.
* The terminal uses a slow, but accurate method to determine the width
  of a character the first time it is printed to the screen. Characters
  are now stored in the terminal in two bytes, rather than one, and may
  in the future be increased to 3 or 4 bytes to ensure support for
  Unicode supplemental planes.
* A simple font-fallback method is employed in the applications that
  support unicode that will make use of the VL Gothic fonts if the
  DejaVu font does not have a character. No guarantees are made for
  support of writing systems other than extended Latin and Japanese.
2012-09-05 20:19:52 -07:00
Kevin Lange
07955c83c6 Fix dozens of build warnings and other oddities.
* Finally bring syscall.h up to speed and include all syscalls in the
  syscall module of the C library.
* Remove the third-party obfuscated C demos (we have nyancat, good
  enough)
* Fix userspace apps to build without complaining about undeclared
  strtok_r by disable __STRICT_ANSI__
* Fix .eh_frame by including the proper stuff with libgcc.
2012-09-04 20:27:49 -07:00
Kevin Lange
efa51d0d56 Don't print silly messages in the terminal...
[ci skip]
2012-09-03 23:54:04 -07:00
Kevin Lange
8ed06789ed New debug printing facilities.
- Can now register a userspace file descriptor as the output for kernel
  print statements through kprintf()
- Can set logging levels for debug print messages, which are separate
  from kernel log events and meant to be more readily visible. Log
  events are recorded in a buffer to be viewed later, though nothing
  actually using logging at the moment.
- Serial output is disabled by default now. You can enable it yourself
  by appending the logtoserial argument to the kernel on boot.
2012-09-03 22:35:11 -07:00
Kevin Lange
bba242dd62 Add a testing framework.
This is an automated system by which we boot qemu headless and use the
serial line to capture output from a testing application that is started
on bootup, running with the VGA terminal shell. This might be expanded
to boot to the graphical display within VNC and perform more advanced
tests with the Python shim using a VNC module for Python; we'll see.
2012-09-02 02:24:25 -07:00
Kevin Lange
c88d6dcb4f Add or update the heading comments for user apps.
Adds useful descriptions to ones that were lacking them, updates ones
that were innacurate, etc.
2012-07-06 21:08:28 -07:00
Kevin Lange
327523aabf Various bits of cleanup 2012-04-19 20:21:19 -05:00
Kevin Lange
4f2c122af5 Context-based graphics library.
All graphics library commands now take a gfx_context_t pointer, which
points to a simple datastructure describing a rendering context (width,
height, depth, total size, front buffer, backbuffer; where backbuffer =
front buffer when not in double-buffering mode, thus we always render to
backbuffer except on a flip). This may have caused a minor speed
reduction, but I don't really care as it's far more important that we
support multiple graphics contexts.

TODO:
- Shared Memory Fonts library (there are a couple of apps that use these
  so-called "shmem fonts" on their own; we need a dedicated library for
  them)
- Break off "TTK" GUI toolkit into its own library. Since it's just a
  callback-based button framework, this shouldn't be too hard right now.
  Also, with the previous tick, I'll be able to put labels on controls
  and start using text in more places.
2012-04-17 13:21:34 -05:00
Kevin Lange
0eaf3a99a3 Separate pthread; add mouse move events? 2012-04-12 22:42:24 -05:00
Kevin Lange
285acf68a0 Reenable login prompts (vga textmode only) 2012-04-11 15:24:24 -05:00
Kevin Lange
ac7720f396 Reenable support for a VGA text-mode terminal. 2012-04-10 23:35:12 -05:00
Kevin Lange
e89fb94d2f Exiting terminals, but there's a problem somewhere... 2012-04-10 21:55:41 -05:00
Kevin Lange
fb6e5d59e3 Completely rewrite rendering model for compositor.
We know longer accept DAMAGE and REDRAW commands. Instead, we just loop
and redraw everything anyway (efficiently, mind you). Pipes still have
issues when closed and various other different things.
2012-03-27 13:58:21 -05:00
Kevin Lange
182de81a79 [userspace] Various. BOOT TO TERMINAL 2012-03-23 17:44:37 -05:00
Kevin Lange
2e4543d956 Oops, silly me. Minor little bug fixed 2012-03-16 20:05:56 -05:00
Kevin Lange
fc00d3f1f9 Terminal improvements 2012-03-16 17:09:00 -05:00
Kevin Lange
ffbe7b7b38 A bunch of stuff. 2012-03-14 15:04:12 -05:00
Kevin Lange
8fb8edba3a I have no idea idea what I'm doing. 2012-03-01 21:13:52 -06:00
Kevin Lange
35f5266acf *sigh*... 2012-02-25 22:47:20 -06:00
Kevin Lange
61967e17e4 Use shmem fonts for terminal 2012-02-25 21:28:33 -06:00
Kevin Lange
52dd077032 Multiple terminals, fixed focusing, getopt is borked 2012-02-23 01:30:56 -06:00
Kevin Lange
ef82703d5d Terminal actually handles input properly [kbd only] 2012-02-23 00:58:14 -06:00
Kevin Lange
db8a75071d We have a terminal. In a window. Seriously. 2012-02-23 00:36:49 -06:00
Kevin Lange
678ed81c65 Extensive stability fixes. I think I finally squashed those stack bugs. 2012-02-16 22:43:41 -06:00
Kevin Lange
c67d2796ef Finish threading (might still be some bugs) 2012-02-16 01:06:44 -06:00