feat: experimental tty console with scrollback buffer.
[lunaix-os.git] / lunaix-os / kernel / lxinit.c
index fa5ce38783fc301b35e5fa0e452fcc9522acc933..8a19841f5c87c88b0e48b528a7e6a29a5fe01d73 100644 (file)
@@ -2,6 +2,7 @@
 #include <lunaix/clock.h>
 #include <lunaix/keyboard.h>
 #include <lunaix/lunistd.h>
+#include <lunaix/lxconsole.h>
 #include <lunaix/mm/kalloc.h>
 #include <lunaix/mm/vmm.h>
 #include <lunaix/proc.h>
@@ -9,7 +10,6 @@
 #include <lunaix/spike.h>
 #include <lunaix/syslog.h>
 #include <lunaix/timer.h>
-#include <lunaix/tty/tty.h>
 
 extern uint8_t __kernel_start;
 
@@ -33,6 +33,13 @@ sigsegv_handler(int signum)
     _exit(signum);
 }
 
+void __USER__
+sigalrm_handler(int signum)
+{
+    pid_t pid = getpid();
+    kprintf(KWARN "I, pid %d, have received an alarm!\n", pid);
+}
+
 void __USER__
 _lxinit_main()
 {
@@ -48,6 +55,9 @@ _lxinit_main()
 
     signal(_SIGCHLD, sigchild_handler);
     signal(_SIGSEGV, sigsegv_handler);
+    signal(_SIGALRM, sigalrm_handler);
+
+    alarm(5);
 
     int status;
 #ifdef WAIT_DEMO
@@ -84,8 +94,7 @@ _lxinit_main()
             if (i == 3) {
                 i = *(int*)0xdeadc0de; // seg fault!
             }
-            tty_put_char('0' + i);
-            tty_put_char('\n');
+            kprintf(KINFO "%d\n", i);
             _exit(0);
         }
         kprintf(KINFO "Forked %d\n", pid);
@@ -123,7 +132,7 @@ _lxinit_main()
         }
         if ((keyevent.state & KBD_KEY_FPRESSED) &&
             (keyevent.keycode & 0xff00) <= KEYPAD) {
-            tty_put_char((char)(keyevent.keycode & 0x00ff));
+            console_write_char((char)(keyevent.keycode & 0x00ff));
             // FIXME: io to vga port is privileged and cause #GP in user mode
             // tty_sync_cursor();
         }