// nitr0us
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<pwd.h>
#include"acct.h" /* Taken from linux-2.6.12/include/linux/ */

main(int argc, char **argv)
{
	int		fd;
	struct acct_v3	acct;
	struct passwd	*pw;

	if(argc != 2){
		fprintf(stderr, "Usage: %s <acctfile>\n", *argv);
		exit(-1);
	}

	if((fd = open(argv[1], O_RDONLY)) == -1){
		perror("open");
		exit(-1);
	}

	printf("%-9s %-8s %-8s %-8s %6s %6s %6s %6s %5s\n", "", "", "", "", "BLOCKS", "CHARS", "MINOR", "MAJOR", "EXIT");
	printf("%-9s %-8s %-8s %-8s %6s %6s %6s %6s %5s\n", "COMMAND", "USER", "GID", "TTY", "R/W", "R/W", "PAGEF", "PAGEF", "CODE");
	while(read(fd, &acct, sizeof(struct acct))){
		printf("%c", (acct.ac_flag & ASU) ? '#' : ' ');
		printf("%-8s ", acct.ac_comm);
		pw = getpwuid(acct.ac_uid);
		if(pw != NULL)
			printf("%-8s ", pw->pw_name);
		else
			printf("UID:%-4d ", acct.ac_uid);
		printf("%-8d ", acct.ac_gid);
		printf("%-8d ", acct.ac_tty);
		printf("%5d ", acct.ac_rw);
		printf("%5d ", acct.ac_io);
		printf("%7d ", acct.ac_minflt);
		printf("%7d ", acct.ac_majflt);
		printf("%4d\n", acct.ac_exitcode);
	}

	close(fd);
	exit(0);
}
