/* sac.c */
int main(int argc, char **argv);
void usage(int n);
struct file *parseradiusdir(char *base, char *pattern, char *file);
time_t getsacdate(char *s);
time_t churn_time(char *s);
u_long hourrangespec(char *s);
struct simuse *usagespec(char *t);
int checkday(time_t t);
struct day *mkday(time_t t);
struct day *mkday(time_t t);
void saclogin(struct sactmp su);
void saclogout(struct sactmp su, int usext);
void do_reboot(time_t t);
void changetime(time_t t, char *line);
void cleanup(void);
void release(struct user *u, time_t t, struct sactmp *su, int usext, int siminc);
void addlogin(struct login **login, struct login **last, time_t in, time_t out, char *name, char *tty, char *host);
void apply_hours(time_t in, time_t out,time_t start, time_t h[24]);
void user_apply_hours(struct user *u, time_t out, struct day *d);
void tty_apply_hours(time_t in, time_t out, struct day *d, struct tty *t);
char *getwrd(char *s);
struct usr *adduser(struct usr **up, char *s);
struct usr *finduser(struct usr *up, char *s);
void addexclude(char *s);
int isexcluded(char *s);
struct tty *findtty(struct tty *tt, char *l);
void addtty(char *s);
int istty(char *s);
void addhost(char *s);
int ishost(char *s);
struct simuse *findsim(struct simuse **s, int i);
int ispattern(char *s);
int patmatch(char *sbuf, char *pat);
void *bmalloc(size_t s);
void report(void);
void print_hours(time_t h[24], time_t total);
char *dtime(time_t t, int d);

/* gronk.c */
void try_fastseek(int fd, struct file *f);
void restore(int fd);
void gronk_sysv(int fd);
void gronk_bsd(int fd);
void gronk_tacacs3(int fd);
void gronk_tacacs4(int fd);
void gronk_ftp(int fd);
void gronk_both(int fd);
void gronk_radius(int fd);
int read_radius(FILE *rfd, struct sactmp *su);
int read_block(FILE *rfd, struct sactmp *su, int *port, time_t *st, char *name);
char **split(char *str, char *delim, int *nwrds);
void gronk_radiuslogfile(int fd);
u_long stoi(char *s);
