This is nppowerd.c in view mode; [Download] [Up]
/* * nppowerd.c rjesse 19 oct 92 * * This daemon turns off a NeXT 400 dpi printer (/dev/np0) * that has been idle for more than "interval" minutes. * * Usage: nppowerd [interval minutes] */ #define INTERVAL (60*60) /* 60 minute default */ #include <stdio.h> #include <bsd/sys/types.h> #include <mach/boolean.h> #include <bsd/sys/ioctl.h> #include <bsd/sys/file.h> #include <bsd/sys/stat.h> #include <bsd/dev/m68k/npio.h> char printer[] = "/dev/np0"; time_t pmtime() { struct stat pstat; if (stat(printer, &pstat) < 0) { fputs("nppowerd: ", stderr); perror(printer); exit(1); } return pstat.st_mtime; } turnpoff() { struct npop op; register pfd; extern errno; errno = 0; if ((pfd=open(printer, O_WRONLY, 0)) < 0) return errno; op.np_op = NPSETPOWER; op.np_power = 0; ioctl(pfd, NPIOCPOP, &op); close(pfd); return errno; } main(ac, av) int ac; char **av; { time_t offtime, mtime, idle; register interval = INTERVAL; if (ac > 2) { fputs("Usage: nppowerd [minutes]\n", stderr); return 1; } switch (fork()) { default: return 0; case -1: return 1; case 0: ; /* child */ } if (ac > 1) interval = atoi(av[1]) * 60; if (interval<60 || interval>(24*60*60) ) interval = INTERVAL; /* * it seems (see NP(4)) to be impossible to test whether the * printer is on or off without first turning it on - opening * the device, even without O_WRONLY, turns it on. so we assume * that upon nppowerd invocation (probably from /etc/rc) that * the printer is on (it gets turned on during the boot sequence). */ offtime = 0; mtime = pmtime(); while (1) { if (mtime != offtime) { /* there has been some printer activity */ while ((idle = time() - mtime) < interval) { sleep(interval-idle+1); mtime = pmtime(); } if (turnpoff() == 0) offtime = mtime = pmtime(); } sleep(interval); mtime = pmtime(); } /*NOTREACHED*/ }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.