ftp.nice.ch/pub/next/tools/system/power.N.bs.tar.gz#/power/power.c

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.