diff options
Diffstat (limited to 'os/init/geninit.b')
| -rw-r--r-- | os/init/geninit.b | 93 |
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); +} |
