6e6 /* Calculates total time used at ISP */ /* Works with dip-3.3.7o-uri */ #include #include #include #include #include main(int argc, char **argv) { int started = 0, total = 0, used; int hour, min, sec; char s[1026], s2[30], startdate[20], *p; char user[16]; char login_s[50], logout_s[50]; FILE *f; struct passwd *pw; if (! (f = fopen("/var/adm/messages", "r"))) { perror("open"); exit(1); } if (argc > 1) { if (argc == 2) strcpy(startdate, argv[1]); else sprintf(startdate, "%s %2s", argv[1], argv[2]); } pw = getpwuid(getuid()); memset(user, 0, sizeof(user)); strncpy(user, pw->pw_name, sizeof(user)); sprintf(login_s, "]: %s dial-up", user); sprintf(logout_s, "]: %s down", user); while (fgets(s, 1024, f)) { if ((! started) && (argc > 1)) { if (argc == 2) { if (strncmp(s, startdate, 3)) continue; } else { if (strncmp(s, startdate, 6)) continue; } } started = 1; if (strstr(s, login_s)) { strncpy(s2, s, 15); s2[15] = 0; printf("Login: %s\n", s2); } else if (strstr(s, logout_s)) { strncpy(s2, s, 15); s2[15] = 0; printf("Logout: %s ", s2); memset(s2, 0, 30); p = strstr(s, "online") + 7; strncpy(s2, p, strlen(p) - 2); used = atoi(s2); hour = used / 3600; min = (used / 60) % 60; sec = used % 60; printf("Time used: %d hours %d minutes %d seconds\n\n", hour, min, sec); total += used; } } fclose(f); hour = total / 3600; min = (total / 60) % 60; sec = total % 60; printf("\nTotal time used: %d hours %d minutes %d seconds\n\n", hour, min, sec); } . 0