[alt.sources] stick this in your utmp and run it...

lear@NET.BIO.NET (Eliot Lear) (08/05/89)

Written for SunOS 4.0.  Should run under most 4.2 and 4.3 systems.
Probably not under System V.  Run this when you are hungary and
looking for fellow hackers.  Use -S in case of emergancy!


static char *Id="$Header: /bionet/bio0/staff/lear/src/RCS/foodp.c,v 1.2 89/08/05 00:48:46 lear Exp $";

/* Foodp!  A program made out of necessity!
 *
 * Usage: foodp [ -sSf ]
 *	  to turn on, use no arguments, to turn off use the -s, which
 *	  stands for SATIATED.  Use -S for starving, and -f for full
 *	  (same as -s).
 *
 */

/*
 * $Log:	foodp.c,v $
 * Revision 1.2  89/08/05  00:48:46  lear
 * added -f and -S options.
 * 
 * Revision 1.1  89/08/04  10:29:17  lear
 * Initial revision
 * 
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <lastlog.h>

main(argc,argv)
     int argc;
     char *argv[];
{
    struct utmp u;
    char *myname;
    int c;
    int ufd;
    int k=0;
    int sflag=0;
    int Sflag=0;

    while ((c = getopt(argc,argv,"sSf")) != -1)
      if ( c == 's' || c == 'f' )
	sflag++;
      else
	{
	    if ( c == 'S' )
	      Sflag++;
	    else
	      {
		  fprintf(stderr,"Usage: %s [ -s ]\n",argv[0]);
		  exit(1);
	      }
	}
    
    if ( (myname=getlogin()) == NULL )
      {
	  fprintf(stderr,"No name found in utmp file.\n");
	  exit(0);
      }

    if ( (ufd= open("/etc/utmp",O_RDWR)) == -1 )
      {
	  perror("open");
	  exit(1);
      }
    
    while ( read(ufd,&u,sizeof(struct utmp)) == sizeof(struct utmp) )
      {
	  if ( ! strncmp(u.ut_name,myname,8))
	    {
		lseek(ufd,-sizeof(struct utmp),L_INCR);
		if ( sflag )
		  strcpy(u.ut_host,"Not hungry");
		else
		  {
		      if ( ! Sflag )
			strcpy(u.ut_host,"FOODP!");
		      else
			strcpy(u.ut_host,"STARVING!");
		  }
		
		write(ufd,&u,sizeof(struct utmp));
	    }
      }

    close(ufd);
}