summaryrefslogtreecommitdiff
path: root/os/init/geninit.b
diff options
context:
space:
mode:
Diffstat (limited to 'os/init/geninit.b')
-rw-r--r--os/init/geninit.b93
1 files changed, 93 insertions, 0 deletions
diff --git a/os/init/geninit.b b/os/init/geninit.b
new file mode 100644
index 00000000..7e63d24f
--- /dev/null
+++ b/os/init/geninit.b
@@ -0,0 +1,93 @@
+implement Init;
+#
+# init program for native inferno, generic pc version
+#
+include "sys.m";
+sys: Sys;
+FD, Connection, sprint, Dir: import sys;
+print, fprint, open, bind, mount, dial, sleep, read, chdir: import sys;
+
+include "draw.m";
+draw: Draw;
+Context: import draw;
+
+include "keyring.m";
+kr: Keyring;
+
+Init: module
+{
+ init: fn();
+};
+
+Shell: module
+{
+ init: fn(ctxt: ref Context, argv: list of string);
+};
+
+init()
+{
+
+ sys = load Sys Sys->PATH;
+ stdin := sys->fildes(0);
+ kr = load Keyring Keyring->PATH;
+
+ sys->print("**\n** Inferno\n** Vita Nuova\n**\n");
+
+ sys->print("Setup boot net services ...\n");
+
+ #
+ # Setup what we need to call a server and
+ # Authenticate
+ #
+ sys->print("Bind console ...\n");
+ bind("#c", "/dev", sys->MAFTER);
+
+ setsysname();
+ print("Standalone mode\n");
+ #
+ # default namespace
+ #
+ sys->unmount(nil, "/dev");
+ bind("#p", "/prog", sys->MREPL); # prog device
+ sys->bind("#d", "/fd", Sys->MREPL);
+ bind("#c", "/dev", sys->MBEFORE); # console
+ bind("#m", "/dev", sys->MAFTER); # mouse setup device
+ bind("#t", "/dev", sys->MAFTER); # serial device
+
+ mouse := load Shell "/dis/mouse.dis";
+ if (mouse != nil) {
+ print("Setting up mouse\n");
+ mouse->init(nil, "/dis/mouse.dis" :: nil);
+ mouse = nil;
+ }
+
+ # create fake nameserver db that can be written to later
+ ramfile := load Shell "/dis/ramfile.dis";
+ if (ramfile != nil) {
+ ramfile->init(nil, "/dis/ramfile.dis" :: "/services/dns/db" :: "" :: nil);
+ ramfile = nil;
+ }
+
+ print("Console...\n");
+ shell := load Shell "/dis/sh.dis";
+ if(shell == nil) {
+ print("init: load /dis/sh.dis: %r\n");
+ exit;
+ }
+ print("starting shell\n");
+ shell->init(nil, "/dis/sh.dis" :: nil);
+ print("shell exited, bye bye\n");
+}
+
+
+#
+# Set system name from nvram
+#
+setsysname()
+{
+ fds := open("/dev/sysname", sys->OWRITE);
+ if(fds == nil)
+ return;
+ buf := array of byte "genericpc";
+ sys->write(fds, buf, len buf);
+}