Print this page
2849 uptime should use locale settings for current time

*** 77,87 **** #define NMAX (sizeof (dummy.ut_user)) #define LMAX (sizeof (dummy.ut_line)) /* Print minimum field widths. */ #define LOGIN_WIDTH 8 ! #define LINE_WIDTH 12 #define DIV60(t) ((t+30)/60) /* x/60 rounded */ #ifdef ERR #undef ERR --- 77,87 ---- #define NMAX (sizeof (dummy.ut_user)) #define LMAX (sizeof (dummy.ut_line)) /* Print minimum field widths. */ #define LOGIN_WIDTH 8 ! #define LINE_WIDTH 8 #define DIV60(t) ((t+30)/60) /* x/60 rounded */ #ifdef ERR #undef ERR
*** 125,137 **** static struct uproc *findhash(pid_t); static time_t findidle(char *); static void clnarglist(char *); static void showtotals(struct uproc *); static void calctotals(struct uproc *); ! static void prttime(time_t, char *); static void prtat(time_t *time); - static void checkampm(char *str); static char *prog; /* pointer to invocation name */ static int header = 1; /* true if -h flag: don't print heading */ static int lflag = 1; /* set if -l flag; 0 for -s flag: short form */ static char *sel_user; /* login of particular user selected */ --- 125,136 ---- static struct uproc *findhash(pid_t); static time_t findidle(char *); static void clnarglist(char *); static void showtotals(struct uproc *); static void calctotals(struct uproc *); ! static void prttime(time_t, int); static void prtat(time_t *time); static char *prog; /* pointer to invocation name */ static int header = 1; /* true if -h flag: don't print heading */ static int lflag = 1; /* set if -l flag; 0 for -s flag: short form */ static char *sel_user; /* login of particular user selected */
*** 307,320 **** if (firstchar == 'u') /* uptime command */ exit(0); if (lflag) { PRINTF((dcgettext(NULL, "User tty " ! "login@ idle JCPU PCPU what\n", LC_TIME))); } else { PRINTF((dcgettext(NULL, ! "User tty idle what\n", LC_TIME))); } if (fflush(stdout) == EOF) { perror((gettext("%s: fflush failed\n"), prog)); exit(1); --- 306,321 ---- if (firstchar == 'u') /* uptime command */ exit(0); if (lflag) { PRINTF((dcgettext(NULL, "User tty " ! "login@ idle JCPU PCPU what\n", ! LC_TIME))); } else { PRINTF((dcgettext(NULL, ! "User tty idle what\n", ! LC_TIME))); } if (fflush(stdout) == EOF) { perror((gettext("%s: fflush failed\n"), prog)); exit(1);
*** 483,499 **** /* print login name of the user */ PRINTF(("%-*.*s ", LOGIN_WIDTH, NMAX, ut->ut_name)); /* print tty user is on */ if (lflag) { ! PRINTF(("%-*.*s", LINE_WIDTH, LMAX, ut->ut_line)); } else { if (ut->ut_line[0] == 'p' && ut->ut_line[1] == 't' && ut->ut_line[2] == 's' && ut->ut_line[3] == '/') { ! PRINTF(("%-*.3s", LMAX, &ut->ut_line[4])); } else { ! PRINTF(("%-*.*s", LINE_WIDTH, LMAX, ut->ut_line)); } } /* print when the user logged in */ --- 484,501 ---- /* print login name of the user */ PRINTF(("%-*.*s ", LOGIN_WIDTH, NMAX, ut->ut_name)); /* print tty user is on */ if (lflag) { ! PRINTF(("%-*.*s ", LINE_WIDTH, LMAX, ut->ut_line)); } else { if (ut->ut_line[0] == 'p' && ut->ut_line[1] == 't' && ut->ut_line[2] == 's' && ut->ut_line[3] == '/') { ! PRINTF(("%-*.*s ", LINE_WIDTH, LMAX, ! &ut->ut_line[4])); } else { ! PRINTF(("%-*.*s ", LINE_WIDTH, LMAX, ut->ut_line)); } } /* print when the user logged in */
*** 502,516 **** prtat(&tim); } /* print idle time */ idle = findidle(ut->ut_line); ! if (idle >= 36 * 60) { ! PRINTF((dcgettext(NULL, "%2ddays ", LC_TIME), ! (idle + 12 * 60) / (24 * 60))); ! } else ! prttime(idle, " "); showtotals(findhash(ut->ut_pid)); } if (fclose(stdout) == EOF) { perror((gettext("%s: fclose failed"), prog)); exit(1); --- 504,514 ---- prtat(&tim); } /* print idle time */ idle = findidle(ut->ut_line); ! prttime(idle, 8); showtotals(findhash(ut->ut_pid)); } if (fclose(stdout) == EOF) { perror((gettext("%s: fclose failed"), prog)); exit(1);
*** 535,552 **** calctotals(up); if (lflag) { /* print CPU time for all processes & children */ /* and need to convert clock ticks to seconds first */ ! prttime((time_t)jobtime, " "); /* print cpu time for interesting process */ /* and need to convert clock ticks to seconds first */ ! prttime((time_t)proctime, " "); } /* what user is doing, current process */ ! PRINTF((" %-.32s\n", doing)); } /* * This recursive routine descends the process * tree starting from the given process pointer(up). --- 533,550 ---- calctotals(up); if (lflag) { /* print CPU time for all processes & children */ /* and need to convert clock ticks to seconds first */ ! prttime((time_t)jobtime, 8); /* print cpu time for interesting process */ /* and need to convert clock ticks to seconds first */ ! prttime((time_t)proctime, 8); } /* what user is doing, current process */ ! PRINTF(("%-.32s\n", doing)); } /* * This recursive routine descends the process * tree starting from the given process pointer(up).
*** 644,699 **** #define HR (60 * 60) #define DAY (24 * HR) #define MON (30 * DAY) /* ! * prttime prints a time in hours and minutes or minutes and seconds. ! * The character string tail is printed at the end, obvious ! * strings to pass are "", " ", or "am". */ static void ! prttime(time_t tim, char *tail) { ! if (tim >= 60) { ! PRINTF((dcgettext(NULL, "%3d:%02d", LC_TIME), ! (int)tim/60, (int)tim%60)); } else if (tim > 0) { ! PRINTF((dcgettext(NULL, " %2d", LC_TIME), (int)tim)); } else { ! PRINTF((" ")); } ! PRINTF(("%s", tail)); } /* ! * prints a 12 hour time given a pointer to a time of day */ static void prtat(time_t *time) { struct tm *p; p = localtime(time); if (now - *time <= 18 * HR) { char timestr[50]; (void) strftime(timestr, sizeof (timestr), ! dcgettext(NULL, "%l:%M""%p", LC_TIME), p); ! checkampm(timestr); ! PRINTF((" %s", timestr)); } else if (now - *time <= 7 * DAY) { char weekdaytime[20]; (void) strftime(weekdaytime, sizeof (weekdaytime), ! dcgettext(NULL, "%a%l%p", LC_TIME), p); ! checkampm(weekdaytime); ! PRINTF((" %s", weekdaytime)); } else { char monthtime[20]; (void) strftime(monthtime, sizeof (monthtime), ! dcgettext(NULL, "%e%b%y", LC_TIME), p); ! PRINTF((" %s", monthtime)); } } /* * find & return number of minutes current tty has been idle --- 642,711 ---- #define HR (60 * 60) #define DAY (24 * HR) #define MON (30 * DAY) /* ! * prttime prints a time in days, hours, minutes, or seconds. ! * The second argument is the field width. */ static void ! prttime(time_t tim, int width) { ! char value[12]; ! char *unit; ! ! if (tim >= 36 * HR) { ! (void) snprintf(value, sizeof (value), "%d", ! (tim + (DAY / 2)) / (DAY)); ! unit = dcgettext(NULL, "days", LC_TIME); ! } else if (tim >= 36 * 60) { ! (void) snprintf(value, sizeof (value), "%d", ! (tim + (HR / 2)) / (HR)); ! unit = dcgettext(NULL, "hours", LC_TIME); ! } else if (tim >= 60) { ! (void) snprintf(value, sizeof (value), "%d", ! (tim + 30) / 60); ! unit = dcgettext(NULL, "mins", LC_TIME); } else if (tim > 0) { ! (void) snprintf(value, sizeof (value), "%d", (int)tim); ! unit = dcgettext(NULL, "secs", LC_TIME); } else { ! (void) strcpy(value, "0"); ! unit = " "; } ! width -= 2 + strlen(value); ! width = (width > 1) ? width : 1; ! PRINTF(("%s %-*s ", value, width, unit)); } /* ! * prints a locale-specific time given a pointer to a time of day */ static void prtat(time_t *time) { struct tm *p; p = localtime(time); if (now - *time <= 18 * HR) { char timestr[50]; + (void) strftime(timestr, sizeof (timestr), ! "%X", p); ! PRINTF(("%-11s ", timestr)); } else if (now - *time <= 7 * DAY) { char weekdaytime[20]; (void) strftime(weekdaytime, sizeof (weekdaytime), ! "%d %b", p); ! PRINTF(("%-11s ", weekdaytime)); } else { char monthtime[20]; (void) strftime(monthtime, sizeof (monthtime), ! "%b %Y", p); ! PRINTF(("%-11s ", monthtime)); } } /* * find & return number of minutes current tty has been idle
*** 736,752 **** } *c = '?'; } } } - - /* replaces all occurences of AM/PM with am/pm */ - static void - checkampm(char *str) - { - char *ampm; - while ((ampm = strstr(str, "AM")) != NULL || - (ampm = strstr(str, "PM")) != NULL) { - *ampm = tolower(*ampm); - *(ampm+1) = tolower(*(ampm+1)); - } - } --- 748,752 ----