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

*** 75,85 **** #define NMAX (sizeof (((struct utmpx *)0)->ut_user)) #define LMAX (sizeof (((struct utmpx *)0)->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 --- 75,85 ---- #define NMAX (sizeof (((struct utmpx *)0)->ut_user)) #define LMAX (sizeof (((struct utmpx *)0)->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
*** 131,143 **** static void clnarglist(char *); static void showproc(struct uproc *); static void showtotals(struct uproc *); static void calctotals(struct uproc *); static char *getty(dev_t); ! static void prttime(time_t, char *); static void prtat(time_t *); - static void checkampm(char *); static char *prog; static int header = 1; /* true if -h flag: don't print heading */ static int lflag = 0; /* true if -l flag: w command format */ static char *sel_user; /* login of particular user selected */ --- 131,142 ---- static void clnarglist(char *); static void showproc(struct uproc *); static void showtotals(struct uproc *); static void calctotals(struct uproc *); static char *getty(dev_t); ! static void prttime(time_t, int); static void prtat(time_t *); static char *prog; static int header = 1; /* true if -h flag: don't print heading */ static int lflag = 0; /* true if -l flag: w command format */ static char *sel_user; /* login of particular user selected */
*** 281,299 **** ut = utmpbegin; /* rewind utmp data */ (void) printf(dcgettext(NULL, " %d user(s)\n", LC_TIME), nusers); (void) printf(dcgettext(NULL, "User tty " ! "login@ idle JCPU PCPU what\n", LC_TIME)); } else { /* standard whodo header */ char date_buf[100]; /* * print current time and date */ (void) strftime(date_buf, sizeof (date_buf), ! dcgettext(NULL, "%C", LC_TIME), localtime(&now)); (void) printf("%s\n", date_buf); /* * print system name */ --- 280,299 ---- ut = utmpbegin; /* rewind utmp data */ (void) printf(dcgettext(NULL, " %d user(s)\n", LC_TIME), nusers); (void) printf(dcgettext(NULL, "User tty " ! "login@ idle JCPU PCPU what\n", ! LC_TIME)); } else { /* standard whodo header */ char date_buf[100]; /* * print current time and date */ (void) strftime(date_buf, sizeof (date_buf), ! "%c", localtime(&now)); (void) printf("%s\n", date_buf); /* * print system name */
*** 472,495 **** /* print login name of the user */ (void) printf("%-*.*s ", LOGIN_WIDTH, (int)NMAX, ut->ut_name); /* print tty user is on */ ! (void) printf("%-*.*s", LINE_WIDTH, (int)LMAX, ut->ut_line); /* print when the user logged in */ tim = ut->ut_xtime; (void) prtat(&tim); /* print idle time */ idle = findidle(ut->ut_line); ! if (idle >= 36 * 60) ! (void) printf(dcgettext(NULL, "%2ddays ", ! LC_TIME), (idle + 12 * 60) / (24 * 60)); ! else ! prttime(idle, " "); showtotals(findhash((pid_t)ut->ut_pid)); } else { /* standard whodo format */ tim = ut->ut_xtime; tm = localtime(&tim); (void) printf("\n%-*.*s %-*.*s %2.1d:%2.2d\n", --- 472,491 ---- /* print login name of the user */ (void) printf("%-*.*s ", LOGIN_WIDTH, (int)NMAX, ut->ut_name); /* print tty user is on */ ! (void) printf("%-*.*s ", LINE_WIDTH, (int)LMAX, ut->ut_line); /* print when the user logged in */ tim = ut->ut_xtime; (void) prtat(&tim); /* print idle time */ idle = findidle(ut->ut_line); ! prttime(idle, 8); showtotals(findhash((pid_t)ut->ut_pid)); } else { /* standard whodo format */ tim = ut->ut_xtime; tm = localtime(&tim); (void) printf("\n%-*.*s %-*.*s %2.1d:%2.2d\n",
*** 560,577 **** (void) strcpy(doing, "-"); /* default act: normally never prints */ calctotals(up); /* 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 */ ! (void) printf(" %-.32s\n", doing); } /* * Used for -l flag (w command) format. * This recursive routine descends the process --- 556,573 ---- (void) strcpy(doing, "-"); /* default act: normally never prints */ calctotals(up); /* 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 */ ! (void) printf("%-.32s\n", doing); } /* * Used for -l flag (w command) format. * This recursive routine descends the process
*** 736,791 **** #define HR (60 * 60) #define DAY (24 * HR) #define MON (30 * DAY) /* ! * 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) ! (void) printf(dcgettext(NULL, "%3d:%02d", LC_TIME), ! (int)tim/60, (int)tim%60); ! else if (tim > 0) ! (void) printf(dcgettext(NULL, " %2d", LC_TIME), (int)tim); ! else ! (void) printf(" "); ! (void) 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); ! (void) 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); ! (void) printf(" %s", weekdaytime); } else { char monthtime[20]; (void) strftime(monthtime, sizeof (monthtime), ! dcgettext(NULL, "%e%b%y", LC_TIME), p); ! (void) printf(" %s", monthtime); } } /* * find & return number of minutes current tty has been idle --- 732,802 ---- #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
*** 828,844 **** } *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)); - } - } --- 839,843 ----