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);}
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);
}