AUSAM/source/S/ac.h
/*
* data and structure definitions
*/
#include <wtmp.h>
#define USER_NAMES /* put user's name on people printout */
/*
#define CHISTOGRAM /* put histogram on hourly averages */
/*
#define DIAGNOSTIC_REDIRECT /* allows flag 'x' to redirect diagnostics to file "diagf" */
/*
#define DEBUG /* allows flag 'y' to turn on debugging */
/*
#define GARBAGE_COLLECTION /* allows for garbage collection in "ualloc" if "sys brk" fails */
/*
#define TIME_IN_DAYS /* allows conversion of time printout to days if >300 hours */
/*
#define TIME_TRACE /* allows flag 'y' to trace time changes */
/*
#define DAY_TRACE /* trace day updates */
/*
* FLAGS -- program parameters
*/
struct flags
{
char I; /* read wtmp file from standard input */
char P; /* specify alternative password file */
char d; /* details by day (default month) */
char e; /* give statistis over 7 days */
char f; /* use form-feeds */
char h; /* give statistics over 24 hours */
char i; /* "individual" contains uid of person */
char l; /* set working days lost */
char locking; /* set if "wtmp" file is locked */
char n; /* no warnings */
char o; /* assume input produced by "cnvtwtmp" */
char p; /* details of people */
char s; /* details of system (default) */
char t; /* details of ttys */
char u; /* tty usage */
char w; /* specify alternative wtmp file */
# ifdef DIAGNOSTIC_REDIRECT
char x; /* diagnostic redirection requested */
# endif
# ifdef DEBUG|TIME_TRACE
char y; /* DEBUG */
# endif
char z; /* (initialised flag) */
}
flg;
#define DATE_CHANGE 0200 /* bit set in flag if large -ve date change has occurred */
/*
* sort orders for people
*/
int bycpu(); /* flag 'C' */
int bylog(); /* flag 'L' */
int byname(); /* flag 'N' */
int bylogons(); /* flag 'S' */
int byuid(); /* flag 'U' */
int (*porder)(); /* pointer to chosen order */
/*
* times
*/
#define YEAR 31536000L /* 365 days ! */
#define WEEK 604800L
#define DAY 86400L
#define HOUR 3600
#define MINUTE 60
long year; /* end of current year */ /* N.B. NOT EXACT AND NOT USED */
long month; /* end of current month */
long week; /* end of current week */
long midnight; /* end of current day */
long hour; /* end of hour */
long lasthour; /* end of last hour */
long timenow; /* current time */
long lastprint; /* time of last print out */
#define W_DAY_IN 1 /* Monday (incl.) */
#define W_DAY_OUT 6 /* Saturday (excl.) */
#define W_HOUR_IN 9 /* 9a.m. (incl.) */
#define W_HOUR_OUT 17 /* 5p.m. (excl.) */
/*
* U_ENT -- the user structure -- initialised in getuser()
*/
#define HASHSIZ 251
#define uhash(A) ((A)%HASHSIZ)
struct u_ent
{
struct u_ent *ue_next; /* next structure in chain */
unsigned ue_uid;
char ue_flags;
char ue_logins; /* count of current logins */
unsigned ue_multilogins; /* count of multiple logins */
unsigned ue_logons; /* count of all logons */
char *ue_namep;
# ifdef USER_NAMES
char *ue_firstname;
char *ue_lastname;
# endif USER_NAMES
long ue_asynctime;
long ue_cputime;
long ue_logtime;
}
*uhasht[HASHSIZ]; /* the hash table */
/* ue_flags */
#define LOGIN 01 /* person is currently logged in */
#define UPDATE 02 /* person has done something in last period */
#define NEWHR 04 /* data has been collected for this hour */
int nu_ents; /* count of user structures */
/*
* TTYS -- the ttys
*/
#define NACTTYS 0177
struct tty
{
struct u_ent *t_userp; /* non-zero if user logged in */
unsigned t_flags;
unsigned t_logons; /* count of all logons */
long t_logintime; /* time user logged in */
long t_logtime; /* total logged */
unsigned t_wd_logons; /* working day logons */
long t_wd_time; /* working day logged */
}
ttys[NACTTYS+1]; /* the ttys */
#define BADTTY (&ttys[NACTTYS])
#define LAST_TTY (&ttys[NACTTYS+1])
#define gtty(A) (&ttys[((A)->w_ttyid&0177)]) /* expand to check tty */
/*
* TTYPROFIL -- ttyprofil[i].tp_realtime = time (i+1) ttys were logged on [ 0 <= i <= NACTTYS-1 ]
*/
struct tty_profil
{
long tp_ontime; /* start time with this number ot ttys */
long tp_realtime; /* real time with this number of ttys */
long tp_wd_realtime; /* real time with this number of ttys during working day */
}
ttyprofil[NACTTYS];
int ttylcount; /* count of currently logged on ttys */
/*
* CLOCK -- hourly clock
*/
struct Hour
{
unsigned c_ttys; /* ttys used during this hour */
unsigned c_logons; /* logons during this hour */
unsigned c_logoffs; /* logoffs during this hour */
long c_logtime; /* time logged during this hour */
long c_cputime; /* cpu time used this hour */
long c_async; /* async time used this hour */
unsigned c_wd_ttys; /* ttys used during this hour */
unsigned c_wd_logons; /* logons during this hour */
unsigned c_wd_lgoffs; /* logoffs during this hour */
long c_wd_lgtime; /* time logged during this hour */
long c_wd_cputime; /* cpu time used this hour */
long c_wd_async; /* async time used this hour */
}
clock[24], /* the clock */
*hourp; /* the hour hand */
#ifdef CHISTOGRAM
#define CHISTCOLS 10 /* number of columns to be used by histogram */
#endif CHISTOGRAM
/*
* SENNIGHT -- 7 days of the week
*/
struct Day
{
unsigned d_weeks; /* number of weeks at this day */
unsigned d_sessions; /* terminal sessions this day */
long d_logtime; /* time logged this day */
long d_cputime; /* cpu time used this day */
long d_async; /* async time used this day */
}
sennight[7], /* the week ( Monday = 0 ) */
*dayp; /* day of the week */
/*
* SYS -- system totals
*/
struct sys_ent
{
long st_boottime, st_uptime; /* uptime figures */
long st_syscpu, st_usercpu; /* total cputime figures */
long st_async;
unsigned st_sessions;
long st_logtime;
long st_wd_uptime; /* working day uptime */
long st_wd_syscpu;
long st_wd_usercpu;
long st_wd_async;
unsigned st_wd_sessions;
long st_wd_logtime;
int st_boots; /* count of reboots */
int st_crashes;
}
sys;
/*
* miscellany
*/
#define PTIMSIZ 8 /* string size produced by ptime() */
char *name; /* program invoked name */
#define max(A,B) (((A)>(B))?A:B)
int working_day; /* TRUE if 9-5, Monday to Friday */
int w_days_lost; /* days supposedly lost from wtmp file */
unsigned individual; /* uid of person if flg.i */
#ifdef TIME_TRACE
struct timetable
{
char *t_name;
long *t_timep;
}
time_table[];
#define TT_ALL 0
#define TT_YEAR 0
#define TT_MONTH 1
#define TT_WEEK 2
#define TT_MIDNIGHT 3
#define TT_HOUR 4
#define TT_LASTHOUR 5
#define TT_TIMENOW 6
#define TT_LASTPRINT 7
#endif TIME_TRACE