This is power.c in view mode; [Download] [Up]
#include <sys/types.h>
#include <sys/file.h>
#include <mon/nvram.h>
#include <sgtty.h>
#include <nextdev/video.h>
#include <stdlib.h>
/*
* Code for manipulating the RTC for auto-power-on.
* Based on some /usr/include-searching and disassembling Preferences
* Hope you can use it.
* These routines wants to be root; otherwise opening of /dev/vid0 will fail.
* Caveat: these routines depends on 32bit int's (as god intended int's
* to be :-) )
*/
/*
* Purpose: low-level routine to open device, make an ioctl and close
* device.
* Return Code: 0 if opening or ioctl fails; 1 for success
* Side effects: data pointed to by ptr may be modified.
*/
static int
do_nvram_io( int code, void *ptr)
{
int fd,ret;
ret = 0;
if( (fd = open( "/dev/vid0", O_RDONLY)) >= 0 ) {
if( ioctl( fd, code, ptr) >= 0) {
ret = 1;
}
(void) close( fd );
}
return ret;
}
/*
* Purpose: sets an epoche-time for powering on
* Return-code: 0 for failure, 1 for success
* Side-effects: sets a power-on date
*/
int
set_nvram_power_on_alarm( int argtime )
{
struct alarm tmpalarm;
/* get old copy and modify it */
if( do_nvram_io( DKIOCGALARM, &tmpalarm) > 0) {
tmpalarm.alarm_time = argtime;
if( do_nvram_io( DKIOCSALARM, &tmpalarm) > 0) {
return 1;
}
}
return 0;
}
/*
* Purpose: get current power-on time
* return-code: date as epoche-time (seconds since 1970)
*/
int
get_nvram_power_on_alarm()
{
struct alarm tmpalarm;
if( do_nvram_io( DKIOCGALARM, &tmpalarm) > 0) {
return tmpalarm.alarm_time;
}
return 0;
}
/*
* Purpose: is the power-on-date feature enabled ?
* return-code: 1 for yes, 0 for no or failure
*/
int
get_nvram_power_on_alarm_enabled()
{
struct alarm tmpalarm;
if( do_nvram_io( DKIOCGALARM, &tmpalarm) > 0) {
return tmpalarm.alarm_enabled;
}
return 0;
}
/*
* Purpose: enable/disable power-on-date feature
* return-code: 0 for failure, 1 for success
*/
int
set_nvram_power_on_alarm_enabled( int argflag )
{
struct alarm tmpalarm;
if( do_nvram_io( DKIOCGALARM, &tmpalarm) > 0) {
tmpalarm.alarm_enabled = argflag;
if( do_nvram_io( DKIOCSALARM, &tmpalarm) > 0) {
return 1;
}
}
return 0;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.