AUSAM/source/S/wall.c

Compare this file to the similar file:
Show the results in this format:

#include	<local-system>

char	mesg[3000];
int	msize;

#include	<utmp.h>
struct	utmp	utmp[256];

main(argc, argv)
char *argv[];
{
	register i, *p;
	int f;

	f = open("/etc/utmp", 0);
	if(f < 0)
	{
		perror("utmp");
		return 1;
	}
	read(f, utmp, sizeof utmp);
	close(f);
	f = 0;
	if(argc >= 2)
	{
		f = open(argv[1], 0);
		if(f < 0)
		{
			perror(argv[1]);
			return 1;
		}
	}
	while((i = read(f, &mesg[msize], sizeof mesg - msize)) > 0)
		msize =+ i;
	if(f) close(f);
	if( i = fork())
	{
		if( i == -1)
		{
			perror();
		}
		else
			return 0;
	}
	for(i=0; i<sizeof utmp/sizeof utmp[0]; i++)
	{
		p = &utmp[i];
#ifndef	AUSAM
		if(p->u_name[0] == 0)
			continue;
#else
		if(p->u_type == 0)
			continue;
#endif	AUSAM
		sendmes(p->u_ttyid);
	}
	return 0;
}

sendmes(tty)

{
	register i;
	register char *s;

	s = "/dev/ttyx";
	s[8] = tty;
	i = open(s, 1);
	if(i < 0)
	{
		perror(s);
		return;
	}
	write(i, "\n\n\007\007\007AGSM Broadcast Message ...\n\n", 33);
	write(i, mesg, msize);
	close(i);
	return;
}