From 27dc8032ab5f4d2e8dabb2070827385f2832ac3c Mon Sep 17 00:00:00 2001 From: aiju Date: Wed, 18 May 2011 04:17:27 +0000 Subject: [PATCH] added scram(8) --- rc/bin/fshalt | 2 ++ sys/man/8/fshalt | 17 ++++++++++++++--- sys/src/cmd/scram.c | 20 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 sys/src/cmd/scram.c diff --git a/rc/bin/fshalt b/rc/bin/fshalt index 681311f17..6dbf51c13 100755 --- a/rc/bin/fshalt +++ b/rc/bin/fshalt @@ -48,6 +48,7 @@ cp /bin/ns /tmp cp /bin/rc /tmp cp /bin/sed /tmp cp /bin/sleep /tmp +cp /bin/scram /tmp bind /tmp /rc bind /tmp /bin @@ -77,6 +78,7 @@ fn x { echo rebooting... echo reboot >'#c/reboot' } + if not scram } x diff --git a/sys/man/8/fshalt b/sys/man/8/fshalt index 25b9e4b61..67cb53268 100644 --- a/sys/man/8/fshalt +++ b/sys/man/8/fshalt @@ -1,6 +1,6 @@ .TH FSHALT 8 .SH NAME -fshalt, reboot \- halt any local file systems and optionally reboot the system +fshalt, scram, reboot \- halt any local file systems and optionally shut down or reboot the system .SH SYNOPSIS .B fshalt [ @@ -8,6 +8,8 @@ fshalt, reboot \- halt any local file systems and optionally reboot the system ] .br .B reboot +.br +.B scram .SH DESCRIPTION .I Fshalt syncs all local @@ -25,6 +27,9 @@ If given .BR -r , .I fshalt will then reboot the machine. +Else it will invoke +.I scram +to shut down the machine. The halting and rebooting is done by copying all necessary commands into a .IR ramfs (4) @@ -35,6 +40,9 @@ local file systems. .PP .I Reboot restarts the machine it is invoked on. +.PP +.I Scram +shuts down the machine it is invoked on. .SH SOURCE .B /rc/bin/fshalt .br @@ -43,6 +51,9 @@ restarts the machine it is invoked on. .IR cons (3), .IR reboot (8) .SH BUGS -On standalone machines, it will be impossible to do anything +On standalone machines, it will be impossible to do anything if scram fails after invoking bare -.LR fshalt . +.IR fshalt . + +.I Scram +is limited to the PC and requires APM. diff --git a/sys/src/cmd/scram.c b/sys/src/cmd/scram.c new file mode 100644 index 000000000..f61a08841 --- /dev/null +++ b/sys/src/cmd/scram.c @@ -0,0 +1,20 @@ +#include +#include +typedef struct Ureg Ureg; +#include + +void +main() +{ + Ureg ureg; + int fd; + + fd = open("/dev/apm", OWRITE); + if(fd < 0) sysfatal("%r"); + memset(&ureg, 0, sizeof ureg); + ureg.ax = 0x5307; + ureg.bx = 0x0001; + ureg.cx = 0x0003; + ureg.trap = 0x15; + write(fd, &ureg, sizeof ureg); +}