115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
215db2897SKrishnendu Sadhukhan - Sun Microsystems * CDDL HEADER START
315db2897SKrishnendu Sadhukhan - Sun Microsystems *
415db2897SKrishnendu Sadhukhan - Sun Microsystems * The contents of this file are subject to the terms of the
515db2897SKrishnendu Sadhukhan - Sun Microsystems * Common Development and Distribution License (the "License").
615db2897SKrishnendu Sadhukhan - Sun Microsystems * You may not use this file except in compliance with the License.
715db2897SKrishnendu Sadhukhan - Sun Microsystems *
815db2897SKrishnendu Sadhukhan - Sun Microsystems * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
915db2897SKrishnendu Sadhukhan - Sun Microsystems * or http://www.opensolaris.org/os/licensing.
1015db2897SKrishnendu Sadhukhan - Sun Microsystems * See the License for the specific language governing permissions
1115db2897SKrishnendu Sadhukhan - Sun Microsystems * and limitations under the License.
1215db2897SKrishnendu Sadhukhan - Sun Microsystems *
1315db2897SKrishnendu Sadhukhan - Sun Microsystems * When distributing Covered Code, include this CDDL HEADER in each
1415db2897SKrishnendu Sadhukhan - Sun Microsystems * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1515db2897SKrishnendu Sadhukhan - Sun Microsystems * If applicable, add the following below this CDDL HEADER, with the
1615db2897SKrishnendu Sadhukhan - Sun Microsystems * fields enclosed by brackets "[]" replaced with your own identifying
1715db2897SKrishnendu Sadhukhan - Sun Microsystems * information: Portions Copyright [yyyy] [name of copyright owner]
1815db2897SKrishnendu Sadhukhan - Sun Microsystems *
1915db2897SKrishnendu Sadhukhan - Sun Microsystems * CDDL HEADER END
2015db2897SKrishnendu Sadhukhan - Sun Microsystems */
2115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
2215db2897SKrishnendu Sadhukhan - Sun Microsystems * Copyright (c) 2008-2009, Intel Corporation.
2315db2897SKrishnendu Sadhukhan - Sun Microsystems * All Rights Reserved.
2415db2897SKrishnendu Sadhukhan - Sun Microsystems */
2515db2897SKrishnendu Sadhukhan - Sun Microsystems
2615db2897SKrishnendu Sadhukhan - Sun Microsystems #include <stdio.h>
2715db2897SKrishnendu Sadhukhan - Sun Microsystems #include <stdlib.h>
2815db2897SKrishnendu Sadhukhan - Sun Microsystems #include <unistd.h>
2915db2897SKrishnendu Sadhukhan - Sun Microsystems #include <string.h>
3015db2897SKrishnendu Sadhukhan - Sun Microsystems #include <sys/types.h>
3115db2897SKrishnendu Sadhukhan - Sun Microsystems #include <sys/time.h>
3215db2897SKrishnendu Sadhukhan - Sun Microsystems #include <dirent.h>
3315db2897SKrishnendu Sadhukhan - Sun Microsystems #include <curses.h>
3415db2897SKrishnendu Sadhukhan - Sun Microsystems #include <time.h>
3515db2897SKrishnendu Sadhukhan - Sun Microsystems #include <wchar.h>
3615db2897SKrishnendu Sadhukhan - Sun Microsystems #include <ctype.h>
3715db2897SKrishnendu Sadhukhan - Sun Microsystems #include <stdarg.h>
3815db2897SKrishnendu Sadhukhan - Sun Microsystems #include <signal.h>
3915db2897SKrishnendu Sadhukhan - Sun Microsystems
4015db2897SKrishnendu Sadhukhan - Sun Microsystems #include "latencytop.h"
4115db2897SKrishnendu Sadhukhan - Sun Microsystems
4215db2897SKrishnendu Sadhukhan - Sun Microsystems #define LT_WINDOW_X 80
4315db2897SKrishnendu Sadhukhan - Sun Microsystems #define LT_WINDOW_Y 24
4415db2897SKrishnendu Sadhukhan - Sun Microsystems
4515db2897SKrishnendu Sadhukhan - Sun Microsystems #define LT_COLOR_DEFAULT 1
4615db2897SKrishnendu Sadhukhan - Sun Microsystems #define LT_COLOR_HEADER 2
4715db2897SKrishnendu Sadhukhan - Sun Microsystems
4815db2897SKrishnendu Sadhukhan - Sun Microsystems /* Windows created by libcurses */
4915db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *titlebar = NULL;
5015db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *captionbar = NULL;
5115db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *sysglobal_window = NULL;
5215db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *taskbar = NULL;
5315db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *process_window = NULL;
5415db2897SKrishnendu Sadhukhan - Sun Microsystems static WINDOW *hintbar = NULL;
5515db2897SKrishnendu Sadhukhan - Sun Microsystems /* Screen dimension */
5615db2897SKrishnendu Sadhukhan - Sun Microsystems static int screen_width = 1, screen_height = 1;
5715db2897SKrishnendu Sadhukhan - Sun Microsystems /* Is display initialized, i.e. are window pointers set up. */
5815db2897SKrishnendu Sadhukhan - Sun Microsystems static int display_initialized = FALSE;
5915db2897SKrishnendu Sadhukhan - Sun Microsystems /* Is initscr() called */
6015db2897SKrishnendu Sadhukhan - Sun Microsystems static int curses_inited = FALSE;
6115db2897SKrishnendu Sadhukhan - Sun Microsystems
6215db2897SKrishnendu Sadhukhan - Sun Microsystems /* To handle user key presses */
6315db2897SKrishnendu Sadhukhan - Sun Microsystems static pid_t selected_pid = INVALID_PID;
6415db2897SKrishnendu Sadhukhan - Sun Microsystems static id_t selected_tid = INVALID_TID;
6515db2897SKrishnendu Sadhukhan - Sun Microsystems static lt_sort_t sort_type = LT_SORT_TOTAL;
6615db2897SKrishnendu Sadhukhan - Sun Microsystems static int thread_mode = FALSE;
6715db2897SKrishnendu Sadhukhan - Sun Microsystems /* Type of list being displayed */
6815db2897SKrishnendu Sadhukhan - Sun Microsystems static int current_list_type = LT_LIST_CAUSE;
6915db2897SKrishnendu Sadhukhan - Sun Microsystems static int show_help = FALSE;
7015db2897SKrishnendu Sadhukhan - Sun Microsystems
7115db2897SKrishnendu Sadhukhan - Sun Microsystems /* Help functions that append/prepend a blank to the given string */
7215db2897SKrishnendu Sadhukhan - Sun Microsystems #define fill_space_right(a, b, c) fill_space((a), (b), (c), TRUE)
7315db2897SKrishnendu Sadhukhan - Sun Microsystems #define fill_space_left(a, b, c) fill_space((a), (b), (c), FALSE)
7415db2897SKrishnendu Sadhukhan - Sun Microsystems
7515db2897SKrishnendu Sadhukhan - Sun Microsystems static void
fill_space(char * buffer,int len,int buffer_limit,int is_right)7615db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space(char *buffer, int len, int buffer_limit, int is_right)
7715db2897SKrishnendu Sadhukhan - Sun Microsystems {
7815db2897SKrishnendu Sadhukhan - Sun Microsystems int i = 0;
7915db2897SKrishnendu Sadhukhan - Sun Microsystems int tofill;
8015db2897SKrishnendu Sadhukhan - Sun Microsystems
8115db2897SKrishnendu Sadhukhan - Sun Microsystems if (len >= buffer_limit) {
8215db2897SKrishnendu Sadhukhan - Sun Microsystems len = buffer_limit - 1;
8315db2897SKrishnendu Sadhukhan - Sun Microsystems }
8415db2897SKrishnendu Sadhukhan - Sun Microsystems
8515db2897SKrishnendu Sadhukhan - Sun Microsystems i = strlen(buffer);
8615db2897SKrishnendu Sadhukhan - Sun Microsystems
8715db2897SKrishnendu Sadhukhan - Sun Microsystems if (i >= len) {
8815db2897SKrishnendu Sadhukhan - Sun Microsystems return;
8915db2897SKrishnendu Sadhukhan - Sun Microsystems }
9015db2897SKrishnendu Sadhukhan - Sun Microsystems
9115db2897SKrishnendu Sadhukhan - Sun Microsystems tofill = len - i;
9215db2897SKrishnendu Sadhukhan - Sun Microsystems
9315db2897SKrishnendu Sadhukhan - Sun Microsystems if (is_right) {
9415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) memset(&buffer[i], ' ', tofill);
9515db2897SKrishnendu Sadhukhan - Sun Microsystems buffer[len] = '\0';
9615db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
9715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) memmove(&buffer[tofill], buffer, i+1);
9815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) memset(buffer, ' ', tofill);
9915db2897SKrishnendu Sadhukhan - Sun Microsystems }
10015db2897SKrishnendu Sadhukhan - Sun Microsystems }
10115db2897SKrishnendu Sadhukhan - Sun Microsystems
10215db2897SKrishnendu Sadhukhan - Sun Microsystems /* Convert the nanosecond value to a human readable string */
10315db2897SKrishnendu Sadhukhan - Sun Microsystems static const char *
get_time_string(double nanoseconds,char * buffer,int len,int fill_width)10415db2897SKrishnendu Sadhukhan - Sun Microsystems get_time_string(double nanoseconds, char *buffer, int len, int fill_width)
10515db2897SKrishnendu Sadhukhan - Sun Microsystems {
10615db2897SKrishnendu Sadhukhan - Sun Microsystems const double ONE_USEC = 1000.0;
10715db2897SKrishnendu Sadhukhan - Sun Microsystems const double ONE_MSEC = 1000000.0;
10815db2897SKrishnendu Sadhukhan - Sun Microsystems const double ONE_SEC = 1000000000.0;
10915db2897SKrishnendu Sadhukhan - Sun Microsystems
11015db2897SKrishnendu Sadhukhan - Sun Microsystems if (nanoseconds < (ONE_USEC - .5)) {
11115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, len, "%3.1f nsec", nanoseconds);
11215db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (nanoseconds < (ONE_MSEC - .5 * ONE_USEC)) {
11315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, len,
11415db2897SKrishnendu Sadhukhan - Sun Microsystems "%3.1f usec", nanoseconds / ONE_USEC);
11515db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (nanoseconds < (ONE_SEC - .5 * ONE_MSEC)) {
11615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, len,
11715db2897SKrishnendu Sadhukhan - Sun Microsystems "%3.1f msec", nanoseconds / ONE_MSEC);
11815db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (nanoseconds < 999.5 * ONE_SEC) {
11915db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, len,
12015db2897SKrishnendu Sadhukhan - Sun Microsystems "%3.1f sec", nanoseconds / ONE_SEC);
12115db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
12215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, len,
12315db2897SKrishnendu Sadhukhan - Sun Microsystems "%.0e sec", nanoseconds / ONE_SEC);
12415db2897SKrishnendu Sadhukhan - Sun Microsystems }
12515db2897SKrishnendu Sadhukhan - Sun Microsystems
12615db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_left(buffer, fill_width, len);
12715db2897SKrishnendu Sadhukhan - Sun Microsystems return (buffer);
12815db2897SKrishnendu Sadhukhan - Sun Microsystems }
12915db2897SKrishnendu Sadhukhan - Sun Microsystems
13015db2897SKrishnendu Sadhukhan - Sun Microsystems /* Used in print_statistics below */
13115db2897SKrishnendu Sadhukhan - Sun Microsystems #define WIDTH_REASON_STRING 36
13215db2897SKrishnendu Sadhukhan - Sun Microsystems #define WIDTH_COUNT 12
13315db2897SKrishnendu Sadhukhan - Sun Microsystems #define WIDTH_AVG 12
13415db2897SKrishnendu Sadhukhan - Sun Microsystems #define WIDTH_MAX 12
13515db2897SKrishnendu Sadhukhan - Sun Microsystems #define WIDTH_PCT 8
13615db2897SKrishnendu Sadhukhan - Sun Microsystems #define BEGIN_COUNT WIDTH_REASON_STRING
13715db2897SKrishnendu Sadhukhan - Sun Microsystems #define BEGIN_AVG (BEGIN_COUNT + WIDTH_COUNT)
13815db2897SKrishnendu Sadhukhan - Sun Microsystems #define BEGIN_MAX (BEGIN_AVG + WIDTH_AVG)
13915db2897SKrishnendu Sadhukhan - Sun Microsystems #define BEGIN_PCT (BEGIN_MAX + WIDTH_MAX)
14015db2897SKrishnendu Sadhukhan - Sun Microsystems
14115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
14215db2897SKrishnendu Sadhukhan - Sun Microsystems * Print statistics in global/process pane. Called by print_sysglobal
14315db2897SKrishnendu Sadhukhan - Sun Microsystems * print_process.
14415db2897SKrishnendu Sadhukhan - Sun Microsystems *
14515db2897SKrishnendu Sadhukhan - Sun Microsystems * Parameters:
14615db2897SKrishnendu Sadhukhan - Sun Microsystems * window - the global or process statistics window.
14715db2897SKrishnendu Sadhukhan - Sun Microsystems * begin_line - where to start printing.
14815db2897SKrishnendu Sadhukhan - Sun Microsystems * count - how many lines should be printed.
14915db2897SKrishnendu Sadhukhan - Sun Microsystems * list - a stat_list.
15015db2897SKrishnendu Sadhukhan - Sun Microsystems */
15115db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_statistics(WINDOW * window,int begin_line,int nlines,void * list)15215db2897SKrishnendu Sadhukhan - Sun Microsystems print_statistics(WINDOW * window, int begin_line, int nlines, void *list)
15315db2897SKrishnendu Sadhukhan - Sun Microsystems {
15415db2897SKrishnendu Sadhukhan - Sun Microsystems uint64_t total;
15515db2897SKrishnendu Sadhukhan - Sun Microsystems int i = 0;
15615db2897SKrishnendu Sadhukhan - Sun Microsystems
15715db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
15815db2897SKrishnendu Sadhukhan - Sun Microsystems return;
15915db2897SKrishnendu Sadhukhan - Sun Microsystems }
16015db2897SKrishnendu Sadhukhan - Sun Microsystems
16115db2897SKrishnendu Sadhukhan - Sun Microsystems total = lt_stat_list_get_gtotal(list);
16215db2897SKrishnendu Sadhukhan - Sun Microsystems
16315db2897SKrishnendu Sadhukhan - Sun Microsystems if (total == 0) {
16415db2897SKrishnendu Sadhukhan - Sun Microsystems return;
16515db2897SKrishnendu Sadhukhan - Sun Microsystems }
16615db2897SKrishnendu Sadhukhan - Sun Microsystems
16715db2897SKrishnendu Sadhukhan - Sun Microsystems while (i < nlines && lt_stat_list_has_item(list, i)) {
16815db2897SKrishnendu Sadhukhan - Sun Microsystems
16915db2897SKrishnendu Sadhukhan - Sun Microsystems char tmp[WIDTH_REASON_STRING];
17015db2897SKrishnendu Sadhukhan - Sun Microsystems const char *reason = lt_stat_list_get_reason(list, i);
17115db2897SKrishnendu Sadhukhan - Sun Microsystems uint64_t count = lt_stat_list_get_count(list, i);
17215db2897SKrishnendu Sadhukhan - Sun Microsystems
17315db2897SKrishnendu Sadhukhan - Sun Microsystems if (count == 0) {
17415db2897SKrishnendu Sadhukhan - Sun Microsystems continue;
17515db2897SKrishnendu Sadhukhan - Sun Microsystems }
17615db2897SKrishnendu Sadhukhan - Sun Microsystems
17715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(tmp, sizeof (tmp), "%s", reason);
17815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(window, i + begin_line, 0, "%s", tmp);
17915db2897SKrishnendu Sadhukhan - Sun Microsystems
18015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(tmp, sizeof (tmp), "%llu", count);
18115db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_left(tmp, WIDTH_COUNT, sizeof (tmp));
18215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(window, i + begin_line, BEGIN_COUNT,
18315db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", tmp);
18415db2897SKrishnendu Sadhukhan - Sun Microsystems
18515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(window, i + begin_line, BEGIN_AVG,
18615db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", get_time_string(
18715db2897SKrishnendu Sadhukhan - Sun Microsystems (double)lt_stat_list_get_sum(list, i) / count,
18815db2897SKrishnendu Sadhukhan - Sun Microsystems tmp, sizeof (tmp), WIDTH_AVG));
18915db2897SKrishnendu Sadhukhan - Sun Microsystems
19015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(window, i + begin_line, BEGIN_MAX,
19115db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", get_time_string(
19215db2897SKrishnendu Sadhukhan - Sun Microsystems (double)lt_stat_list_get_max(list, i),
19315db2897SKrishnendu Sadhukhan - Sun Microsystems tmp, sizeof (tmp), WIDTH_MAX));
19415db2897SKrishnendu Sadhukhan - Sun Microsystems
19515db2897SKrishnendu Sadhukhan - Sun Microsystems if (LT_LIST_SPECIALS != current_list_type) {
19615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(tmp, sizeof (tmp), "%.1f %%",
19715db2897SKrishnendu Sadhukhan - Sun Microsystems (double)lt_stat_list_get_sum(list, i)
19815db2897SKrishnendu Sadhukhan - Sun Microsystems / total * 100.0);
19915db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
20015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(tmp, sizeof (tmp), "--- ");
20115db2897SKrishnendu Sadhukhan - Sun Microsystems }
20215db2897SKrishnendu Sadhukhan - Sun Microsystems
20315db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_left(tmp, WIDTH_PCT, sizeof (tmp));
20415db2897SKrishnendu Sadhukhan - Sun Microsystems
20515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(window, i + begin_line, BEGIN_PCT,
20615db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", tmp);
20715db2897SKrishnendu Sadhukhan - Sun Microsystems i++;
20815db2897SKrishnendu Sadhukhan - Sun Microsystems }
20915db2897SKrishnendu Sadhukhan - Sun Microsystems }
21015db2897SKrishnendu Sadhukhan - Sun Microsystems
21115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
21215db2897SKrishnendu Sadhukhan - Sun Microsystems * Print statistics in global pane.
21315db2897SKrishnendu Sadhukhan - Sun Microsystems */
21415db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_sysglobal(void)21515db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal(void)
21615db2897SKrishnendu Sadhukhan - Sun Microsystems {
21715db2897SKrishnendu Sadhukhan - Sun Microsystems void *list;
21815db2897SKrishnendu Sadhukhan - Sun Microsystems char header[256];
21915db2897SKrishnendu Sadhukhan - Sun Microsystems
22015db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
22115db2897SKrishnendu Sadhukhan - Sun Microsystems return;
22215db2897SKrishnendu Sadhukhan - Sun Microsystems }
22315db2897SKrishnendu Sadhukhan - Sun Microsystems
22415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(sysglobal_window);
22515db2897SKrishnendu Sadhukhan - Sun Microsystems
22615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattron(sysglobal_window, A_REVERSE);
22715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(header, sizeof (header),
22815db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", "System wide latencies");
22915db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_right(header, screen_width, sizeof (header));
23015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(sysglobal_window, 0, 0, "%s", header);
23115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(sysglobal_window, A_REVERSE);
23215db2897SKrishnendu Sadhukhan - Sun Microsystems
23315db2897SKrishnendu Sadhukhan - Sun Microsystems list = lt_stat_list_create(current_list_type,
23415db2897SKrishnendu Sadhukhan - Sun Microsystems LT_LEVEL_GLOBAL, 0, 0, 10, sort_type);
23515db2897SKrishnendu Sadhukhan - Sun Microsystems print_statistics(sysglobal_window, 1, 10, list);
23615db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_list_free(list);
23715db2897SKrishnendu Sadhukhan - Sun Microsystems
23815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(sysglobal_window);
23915db2897SKrishnendu Sadhukhan - Sun Microsystems }
24015db2897SKrishnendu Sadhukhan - Sun Microsystems
24115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
24215db2897SKrishnendu Sadhukhan - Sun Microsystems * Prints current operation mode. Mode is combination of:
24315db2897SKrishnendu Sadhukhan - Sun Microsystems *
24415db2897SKrishnendu Sadhukhan - Sun Microsystems * "Process or Thread", and "1 or 2 or 3".
24515db2897SKrishnendu Sadhukhan - Sun Microsystems */
24615db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_current_mode()24715db2897SKrishnendu Sadhukhan - Sun Microsystems print_current_mode()
24815db2897SKrishnendu Sadhukhan - Sun Microsystems {
24915db2897SKrishnendu Sadhukhan - Sun Microsystems char type;
25015db2897SKrishnendu Sadhukhan - Sun Microsystems
25115db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
25215db2897SKrishnendu Sadhukhan - Sun Microsystems return;
25315db2897SKrishnendu Sadhukhan - Sun Microsystems }
25415db2897SKrishnendu Sadhukhan - Sun Microsystems
25515db2897SKrishnendu Sadhukhan - Sun Microsystems switch (current_list_type) {
25615db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_LIST_CAUSE:
25715db2897SKrishnendu Sadhukhan - Sun Microsystems type = '1';
25815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
25915db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_LIST_SPECIALS:
26015db2897SKrishnendu Sadhukhan - Sun Microsystems type = '2';
26115db2897SKrishnendu Sadhukhan - Sun Microsystems break;
26215db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_LIST_SOBJ:
26315db2897SKrishnendu Sadhukhan - Sun Microsystems type = '3';
26415db2897SKrishnendu Sadhukhan - Sun Microsystems break;
26515db2897SKrishnendu Sadhukhan - Sun Microsystems default:
26615db2897SKrishnendu Sadhukhan - Sun Microsystems type = '?';
26715db2897SKrishnendu Sadhukhan - Sun Microsystems break;
26815db2897SKrishnendu Sadhukhan - Sun Microsystems }
26915db2897SKrishnendu Sadhukhan - Sun Microsystems
27015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, screen_width - 8, "View: %c%c",
27115db2897SKrishnendu Sadhukhan - Sun Microsystems type, thread_mode ? 'T' : 'P');
27215db2897SKrishnendu Sadhukhan - Sun Microsystems }
27315db2897SKrishnendu Sadhukhan - Sun Microsystems
274*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems /*
275*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems * Print process window bar when the list is empty.
276*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems */
277*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems static void
print_empty_process_bar()278*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_empty_process_bar()
279*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems {
280*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems char header[256];
281*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems
282*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
283*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems return;
284*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems }
285*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems
286*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) werase(process_window);
287*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) wattron(process_window, A_REVERSE);
288*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(header, sizeof (header),
289*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems "No process/thread data is available");
290*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems fill_space_right(header, screen_width, sizeof (header));
291*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, 0, "%s", header);
292*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems
293*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_current_mode();
294*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(process_window, A_REVERSE);
295*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems
296*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(process_window);
297*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems }
298*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems
29915db2897SKrishnendu Sadhukhan - Sun Microsystems /*
30015db2897SKrishnendu Sadhukhan - Sun Microsystems * Print per-process statistics in process pane.
30115db2897SKrishnendu Sadhukhan - Sun Microsystems * This is called when mode of operation is process.
30215db2897SKrishnendu Sadhukhan - Sun Microsystems */
30315db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_process(unsigned int pid)30415db2897SKrishnendu Sadhukhan - Sun Microsystems print_process(unsigned int pid)
30515db2897SKrishnendu Sadhukhan - Sun Microsystems {
30615db2897SKrishnendu Sadhukhan - Sun Microsystems void *list;
30715db2897SKrishnendu Sadhukhan - Sun Microsystems char header[256];
30815db2897SKrishnendu Sadhukhan - Sun Microsystems char tmp[30];
30915db2897SKrishnendu Sadhukhan - Sun Microsystems
31015db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
31115db2897SKrishnendu Sadhukhan - Sun Microsystems return;
31215db2897SKrishnendu Sadhukhan - Sun Microsystems }
31315db2897SKrishnendu Sadhukhan - Sun Microsystems
31415db2897SKrishnendu Sadhukhan - Sun Microsystems list = lt_stat_list_create(current_list_type, LT_LEVEL_PROCESS,
31515db2897SKrishnendu Sadhukhan - Sun Microsystems pid, 0, 8, sort_type);
31615db2897SKrishnendu Sadhukhan - Sun Microsystems
31715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(process_window);
31815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattron(process_window, A_REVERSE);
31915db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(header, sizeof (header), "Process %s (%i), %d threads",
32015db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_proc_get_name(pid), pid, lt_stat_proc_get_nthreads(pid));
32115db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_right(header, screen_width, sizeof (header));
32215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, 0, "%s", header);
32315db2897SKrishnendu Sadhukhan - Sun Microsystems
32415db2897SKrishnendu Sadhukhan - Sun Microsystems if (current_list_type != LT_LIST_SPECIALS) {
32515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, 48, "Total: %s",
32615db2897SKrishnendu Sadhukhan - Sun Microsystems get_time_string((double)lt_stat_list_get_gtotal(list),
32715db2897SKrishnendu Sadhukhan - Sun Microsystems tmp, sizeof (tmp), 12));
32815db2897SKrishnendu Sadhukhan - Sun Microsystems }
32915db2897SKrishnendu Sadhukhan - Sun Microsystems
33015db2897SKrishnendu Sadhukhan - Sun Microsystems print_current_mode();
33115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(process_window, A_REVERSE);
33215db2897SKrishnendu Sadhukhan - Sun Microsystems print_statistics(process_window, 1, 8, list);
33315db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_list_free(list);
33415db2897SKrishnendu Sadhukhan - Sun Microsystems
33515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(process_window);
33615db2897SKrishnendu Sadhukhan - Sun Microsystems }
33715db2897SKrishnendu Sadhukhan - Sun Microsystems
33815db2897SKrishnendu Sadhukhan - Sun Microsystems /*
33915db2897SKrishnendu Sadhukhan - Sun Microsystems * Display the list of processes that are tracked, in task bar.
34015db2897SKrishnendu Sadhukhan - Sun Microsystems * This one is called when mode of operation is process.
34115db2897SKrishnendu Sadhukhan - Sun Microsystems */
34215db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_taskbar_process(pid_t * pidlist,int pidlist_len,int pidlist_index)34315db2897SKrishnendu Sadhukhan - Sun Microsystems print_taskbar_process(pid_t *pidlist, int pidlist_len, int pidlist_index)
34415db2897SKrishnendu Sadhukhan - Sun Microsystems {
34515db2897SKrishnendu Sadhukhan - Sun Microsystems const int ITEM_WIDTH = 8;
34615db2897SKrishnendu Sadhukhan - Sun Microsystems
34715db2897SKrishnendu Sadhukhan - Sun Microsystems int number_item;
34815db2897SKrishnendu Sadhukhan - Sun Microsystems int i;
34915db2897SKrishnendu Sadhukhan - Sun Microsystems int xpos = 0;
35015db2897SKrishnendu Sadhukhan - Sun Microsystems
35115db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
35215db2897SKrishnendu Sadhukhan - Sun Microsystems return;
35315db2897SKrishnendu Sadhukhan - Sun Microsystems }
35415db2897SKrishnendu Sadhukhan - Sun Microsystems
35515db2897SKrishnendu Sadhukhan - Sun Microsystems number_item = (screen_width / ITEM_WIDTH) - 1;
35615db2897SKrishnendu Sadhukhan - Sun Microsystems i = pidlist_index - (pidlist_index % number_item);
35715db2897SKrishnendu Sadhukhan - Sun Microsystems
35815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(taskbar);
35915db2897SKrishnendu Sadhukhan - Sun Microsystems
36015db2897SKrishnendu Sadhukhan - Sun Microsystems if (i != 0) {
36115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, xpos, "<-");
36215db2897SKrishnendu Sadhukhan - Sun Microsystems }
36315db2897SKrishnendu Sadhukhan - Sun Microsystems
36415db2897SKrishnendu Sadhukhan - Sun Microsystems xpos = ITEM_WIDTH / 2;
36515db2897SKrishnendu Sadhukhan - Sun Microsystems
36615db2897SKrishnendu Sadhukhan - Sun Microsystems while (xpos + ITEM_WIDTH <= screen_width && i < pidlist_len) {
36715db2897SKrishnendu Sadhukhan - Sun Microsystems char str[ITEM_WIDTH+1];
36815db2897SKrishnendu Sadhukhan - Sun Microsystems int slen;
36915db2897SKrishnendu Sadhukhan - Sun Microsystems const char *pname = lt_stat_proc_get_name(pidlist[i]);
37015db2897SKrishnendu Sadhukhan - Sun Microsystems
37115db2897SKrishnendu Sadhukhan - Sun Microsystems if (pname && pname[0]) {
37215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(str, sizeof (str) - 1, "%s", pname);
37315db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
37415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(str, sizeof (str) - 1,
37515db2897SKrishnendu Sadhukhan - Sun Microsystems "<%d>", pidlist[i]);
37615db2897SKrishnendu Sadhukhan - Sun Microsystems }
37715db2897SKrishnendu Sadhukhan - Sun Microsystems
37815db2897SKrishnendu Sadhukhan - Sun Microsystems slen = strlen(str);
37915db2897SKrishnendu Sadhukhan - Sun Microsystems
38015db2897SKrishnendu Sadhukhan - Sun Microsystems if (slen < ITEM_WIDTH) {
38115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) memset(&str[slen], ' ', ITEM_WIDTH - slen);
38215db2897SKrishnendu Sadhukhan - Sun Microsystems }
38315db2897SKrishnendu Sadhukhan - Sun Microsystems
38415db2897SKrishnendu Sadhukhan - Sun Microsystems str[sizeof (str) - 1] = '\0';
38515db2897SKrishnendu Sadhukhan - Sun Microsystems
38615db2897SKrishnendu Sadhukhan - Sun Microsystems if (i == pidlist_index) {
38715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattron(taskbar, A_REVERSE);
38815db2897SKrishnendu Sadhukhan - Sun Microsystems }
38915db2897SKrishnendu Sadhukhan - Sun Microsystems
39015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, xpos, "%s", str);
39115db2897SKrishnendu Sadhukhan - Sun Microsystems
39215db2897SKrishnendu Sadhukhan - Sun Microsystems if (i == pidlist_index) {
39315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(taskbar, A_REVERSE);
39415db2897SKrishnendu Sadhukhan - Sun Microsystems }
39515db2897SKrishnendu Sadhukhan - Sun Microsystems
39615db2897SKrishnendu Sadhukhan - Sun Microsystems xpos += ITEM_WIDTH;
39715db2897SKrishnendu Sadhukhan - Sun Microsystems i++;
39815db2897SKrishnendu Sadhukhan - Sun Microsystems }
39915db2897SKrishnendu Sadhukhan - Sun Microsystems
40015db2897SKrishnendu Sadhukhan - Sun Microsystems if (i != pidlist_len) {
40115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, screen_width - 2, "->");
40215db2897SKrishnendu Sadhukhan - Sun Microsystems }
40315db2897SKrishnendu Sadhukhan - Sun Microsystems
40415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(taskbar);
40515db2897SKrishnendu Sadhukhan - Sun Microsystems }
40615db2897SKrishnendu Sadhukhan - Sun Microsystems
40715db2897SKrishnendu Sadhukhan - Sun Microsystems /*
40815db2897SKrishnendu Sadhukhan - Sun Microsystems * Display the list of processes that are tracked, in task bar.
40915db2897SKrishnendu Sadhukhan - Sun Microsystems * This one is called when mode of operation is thread.
41015db2897SKrishnendu Sadhukhan - Sun Microsystems */
41115db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_taskbar_thread(pid_t * pidlist,id_t * tidlist,int list_len,int list_index)41215db2897SKrishnendu Sadhukhan - Sun Microsystems print_taskbar_thread(pid_t *pidlist, id_t *tidlist, int list_len,
41315db2897SKrishnendu Sadhukhan - Sun Microsystems int list_index)
41415db2897SKrishnendu Sadhukhan - Sun Microsystems {
41515db2897SKrishnendu Sadhukhan - Sun Microsystems const int ITEM_WIDTH = 12;
41615db2897SKrishnendu Sadhukhan - Sun Microsystems
41715db2897SKrishnendu Sadhukhan - Sun Microsystems int number_item;
41815db2897SKrishnendu Sadhukhan - Sun Microsystems int i;
41915db2897SKrishnendu Sadhukhan - Sun Microsystems int xpos = 0;
42015db2897SKrishnendu Sadhukhan - Sun Microsystems const char *pname = NULL;
42115db2897SKrishnendu Sadhukhan - Sun Microsystems pid_t last_pid = INVALID_PID;
42215db2897SKrishnendu Sadhukhan - Sun Microsystems
42315db2897SKrishnendu Sadhukhan - Sun Microsystems
42415db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
42515db2897SKrishnendu Sadhukhan - Sun Microsystems return;
42615db2897SKrishnendu Sadhukhan - Sun Microsystems }
42715db2897SKrishnendu Sadhukhan - Sun Microsystems
42815db2897SKrishnendu Sadhukhan - Sun Microsystems number_item = (screen_width - 8) / ITEM_WIDTH;
42915db2897SKrishnendu Sadhukhan - Sun Microsystems i = list_index - (list_index % number_item);
43015db2897SKrishnendu Sadhukhan - Sun Microsystems
43115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(taskbar);
43215db2897SKrishnendu Sadhukhan - Sun Microsystems
43315db2897SKrishnendu Sadhukhan - Sun Microsystems if (i != 0) {
43415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, xpos, "<-");
43515db2897SKrishnendu Sadhukhan - Sun Microsystems }
43615db2897SKrishnendu Sadhukhan - Sun Microsystems
43715db2897SKrishnendu Sadhukhan - Sun Microsystems xpos = 4;
43815db2897SKrishnendu Sadhukhan - Sun Microsystems
43915db2897SKrishnendu Sadhukhan - Sun Microsystems while (xpos + ITEM_WIDTH <= screen_width && i < list_len) {
44015db2897SKrishnendu Sadhukhan - Sun Microsystems char str[ITEM_WIDTH+1];
44115db2897SKrishnendu Sadhukhan - Sun Microsystems int slen, tlen;
44215db2897SKrishnendu Sadhukhan - Sun Microsystems
44315db2897SKrishnendu Sadhukhan - Sun Microsystems if (pidlist[i] != last_pid) {
44415db2897SKrishnendu Sadhukhan - Sun Microsystems pname = lt_stat_proc_get_name(pidlist[i]);
44515db2897SKrishnendu Sadhukhan - Sun Microsystems last_pid = pidlist[i];
44615db2897SKrishnendu Sadhukhan - Sun Microsystems }
44715db2897SKrishnendu Sadhukhan - Sun Microsystems
44815db2897SKrishnendu Sadhukhan - Sun Microsystems /*
44915db2897SKrishnendu Sadhukhan - Sun Microsystems * Calculate length of thread's ID; use shorter process name
45015db2897SKrishnendu Sadhukhan - Sun Microsystems * in order to save space on the screen.
45115db2897SKrishnendu Sadhukhan - Sun Microsystems */
45215db2897SKrishnendu Sadhukhan - Sun Microsystems tlen = snprintf(NULL, 0, "_%d", tidlist[i]);
45315db2897SKrishnendu Sadhukhan - Sun Microsystems
45415db2897SKrishnendu Sadhukhan - Sun Microsystems if (pname && pname[0]) {
45515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(str, sizeof (str) - tlen - 1,
45615db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", pname);
45715db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
45815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(str, sizeof (str) - tlen - 1,
45915db2897SKrishnendu Sadhukhan - Sun Microsystems "<%d>", pidlist[i]);
46015db2897SKrishnendu Sadhukhan - Sun Microsystems }
46115db2897SKrishnendu Sadhukhan - Sun Microsystems
46215db2897SKrishnendu Sadhukhan - Sun Microsystems slen = strlen(str);
46315db2897SKrishnendu Sadhukhan - Sun Microsystems
46415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(&str[slen], sizeof (str) - slen,
46515db2897SKrishnendu Sadhukhan - Sun Microsystems "_%d", tidlist[i]);
46615db2897SKrishnendu Sadhukhan - Sun Microsystems
46715db2897SKrishnendu Sadhukhan - Sun Microsystems slen += tlen;
46815db2897SKrishnendu Sadhukhan - Sun Microsystems
46915db2897SKrishnendu Sadhukhan - Sun Microsystems if (slen < ITEM_WIDTH) {
47015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) memset(&str[slen], ' ', ITEM_WIDTH - slen);
47115db2897SKrishnendu Sadhukhan - Sun Microsystems }
47215db2897SKrishnendu Sadhukhan - Sun Microsystems
47315db2897SKrishnendu Sadhukhan - Sun Microsystems str[sizeof (str) - 1] = '\0';
47415db2897SKrishnendu Sadhukhan - Sun Microsystems
47515db2897SKrishnendu Sadhukhan - Sun Microsystems if (i == list_index) {
47615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattron(taskbar, A_REVERSE);
47715db2897SKrishnendu Sadhukhan - Sun Microsystems }
47815db2897SKrishnendu Sadhukhan - Sun Microsystems
47915db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, xpos, "%s", str);
48015db2897SKrishnendu Sadhukhan - Sun Microsystems
48115db2897SKrishnendu Sadhukhan - Sun Microsystems if (i == list_index) {
48215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(taskbar, A_REVERSE);
48315db2897SKrishnendu Sadhukhan - Sun Microsystems }
48415db2897SKrishnendu Sadhukhan - Sun Microsystems
48515db2897SKrishnendu Sadhukhan - Sun Microsystems xpos += ITEM_WIDTH;
48615db2897SKrishnendu Sadhukhan - Sun Microsystems i++;
48715db2897SKrishnendu Sadhukhan - Sun Microsystems }
48815db2897SKrishnendu Sadhukhan - Sun Microsystems
48915db2897SKrishnendu Sadhukhan - Sun Microsystems if (i != list_len) {
49015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(taskbar, 0, screen_width - 2, "->");
49115db2897SKrishnendu Sadhukhan - Sun Microsystems }
49215db2897SKrishnendu Sadhukhan - Sun Microsystems
49315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(taskbar);
49415db2897SKrishnendu Sadhukhan - Sun Microsystems }
49515db2897SKrishnendu Sadhukhan - Sun Microsystems
49615db2897SKrishnendu Sadhukhan - Sun Microsystems /*
49715db2897SKrishnendu Sadhukhan - Sun Microsystems * Print per-thread statistics in process pane.
49815db2897SKrishnendu Sadhukhan - Sun Microsystems * This is called when mode of operation is thread.
49915db2897SKrishnendu Sadhukhan - Sun Microsystems */
50015db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_thread(pid_t pid,id_t tid)50115db2897SKrishnendu Sadhukhan - Sun Microsystems print_thread(pid_t pid, id_t tid)
50215db2897SKrishnendu Sadhukhan - Sun Microsystems {
50315db2897SKrishnendu Sadhukhan - Sun Microsystems void *list;
50415db2897SKrishnendu Sadhukhan - Sun Microsystems char header[256];
50515db2897SKrishnendu Sadhukhan - Sun Microsystems char tmp[30];
50615db2897SKrishnendu Sadhukhan - Sun Microsystems
50715db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
50815db2897SKrishnendu Sadhukhan - Sun Microsystems return;
50915db2897SKrishnendu Sadhukhan - Sun Microsystems }
51015db2897SKrishnendu Sadhukhan - Sun Microsystems
51115db2897SKrishnendu Sadhukhan - Sun Microsystems list = lt_stat_list_create(current_list_type, LT_LEVEL_THREAD,
51215db2897SKrishnendu Sadhukhan - Sun Microsystems pid, tid, 8, sort_type);
51315db2897SKrishnendu Sadhukhan - Sun Microsystems
51415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(process_window);
51515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattron(process_window, A_REVERSE);
51615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(header, sizeof (header),
51715db2897SKrishnendu Sadhukhan - Sun Microsystems "Process %s (%i), LWP %d",
51815db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_proc_get_name(pid), pid, tid);
51915db2897SKrishnendu Sadhukhan - Sun Microsystems fill_space_right(header, screen_width, sizeof (header));
52015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, 0, "%s", header);
52115db2897SKrishnendu Sadhukhan - Sun Microsystems
52215db2897SKrishnendu Sadhukhan - Sun Microsystems if (current_list_type != LT_LIST_SPECIALS) {
52315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(process_window, 0, 48, "Total: %s",
52415db2897SKrishnendu Sadhukhan - Sun Microsystems get_time_string(
52515db2897SKrishnendu Sadhukhan - Sun Microsystems (double)lt_stat_list_get_gtotal(list),
52615db2897SKrishnendu Sadhukhan - Sun Microsystems tmp, sizeof (tmp), 12));
52715db2897SKrishnendu Sadhukhan - Sun Microsystems }
52815db2897SKrishnendu Sadhukhan - Sun Microsystems
52915db2897SKrishnendu Sadhukhan - Sun Microsystems print_current_mode();
53015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattroff(process_window, A_REVERSE);
53115db2897SKrishnendu Sadhukhan - Sun Microsystems print_statistics(process_window, 1, 8, list);
53215db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_list_free(list);
53315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(process_window);
53415db2897SKrishnendu Sadhukhan - Sun Microsystems }
53515db2897SKrishnendu Sadhukhan - Sun Microsystems
53615db2897SKrishnendu Sadhukhan - Sun Microsystems /*
53715db2897SKrishnendu Sadhukhan - Sun Microsystems * Update hint string at the bottom line. The message to print is stored in
53815db2897SKrishnendu Sadhukhan - Sun Microsystems * hint. If hint is NULL, the function will display its own message.
53915db2897SKrishnendu Sadhukhan - Sun Microsystems */
54015db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_hint(const char * hint)54115db2897SKrishnendu Sadhukhan - Sun Microsystems print_hint(const char *hint)
54215db2897SKrishnendu Sadhukhan - Sun Microsystems {
54315db2897SKrishnendu Sadhukhan - Sun Microsystems const char *HINTS[] = {
54415db2897SKrishnendu Sadhukhan - Sun Microsystems "Press '<' or '>' to switch between processes.",
54515db2897SKrishnendu Sadhukhan - Sun Microsystems "Press 'q' to exit.",
54615db2897SKrishnendu Sadhukhan - Sun Microsystems "Press 'r' to refresh immediately.",
54715db2897SKrishnendu Sadhukhan - Sun Microsystems "Press 't' to toggle Process/Thread display mode.",
54815db2897SKrishnendu Sadhukhan - Sun Microsystems "Press 'h' for help.",
549*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems "Use 'c', 'a', 'm', 'p' to change sort criteria.",
55015db2897SKrishnendu Sadhukhan - Sun Microsystems "Use '1', '2', '3' to switch between windows."
55115db2897SKrishnendu Sadhukhan - Sun Microsystems };
55215db2897SKrishnendu Sadhukhan - Sun Microsystems const uint64_t update_interval = 5000; /* 5 seconds */
55315db2897SKrishnendu Sadhukhan - Sun Microsystems
55415db2897SKrishnendu Sadhukhan - Sun Microsystems static int index = 0;
55515db2897SKrishnendu Sadhukhan - Sun Microsystems static uint64_t next_hint = 0;
55615db2897SKrishnendu Sadhukhan - Sun Microsystems uint64_t now = lt_millisecond();
55715db2897SKrishnendu Sadhukhan - Sun Microsystems
55815db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
55915db2897SKrishnendu Sadhukhan - Sun Microsystems return;
56015db2897SKrishnendu Sadhukhan - Sun Microsystems }
56115db2897SKrishnendu Sadhukhan - Sun Microsystems
56215db2897SKrishnendu Sadhukhan - Sun Microsystems if (hint == NULL) {
56315db2897SKrishnendu Sadhukhan - Sun Microsystems if (now < next_hint) {
56415db2897SKrishnendu Sadhukhan - Sun Microsystems return;
56515db2897SKrishnendu Sadhukhan - Sun Microsystems }
56615db2897SKrishnendu Sadhukhan - Sun Microsystems
56715db2897SKrishnendu Sadhukhan - Sun Microsystems hint = HINTS[index];
56815db2897SKrishnendu Sadhukhan - Sun Microsystems index = (index + 1) % (sizeof (HINTS) / sizeof (HINTS[0]));
56915db2897SKrishnendu Sadhukhan - Sun Microsystems next_hint = now + update_interval;
57015db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
57115db2897SKrishnendu Sadhukhan - Sun Microsystems /*
57215db2897SKrishnendu Sadhukhan - Sun Microsystems * Important messages are displayed at least every 2 cycles.
57315db2897SKrishnendu Sadhukhan - Sun Microsystems */
57415db2897SKrishnendu Sadhukhan - Sun Microsystems next_hint = now + update_interval * 2;
57515db2897SKrishnendu Sadhukhan - Sun Microsystems }
57615db2897SKrishnendu Sadhukhan - Sun Microsystems
57715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(hintbar);
57815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(hintbar, 0, (screen_width - strlen(hint)) / 2,
57915db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", hint);
58015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(hintbar);
58115db2897SKrishnendu Sadhukhan - Sun Microsystems }
58215db2897SKrishnendu Sadhukhan - Sun Microsystems
58315db2897SKrishnendu Sadhukhan - Sun Microsystems /*
58415db2897SKrishnendu Sadhukhan - Sun Microsystems * Create a PID list or a PID/TID list (if operation mode is thread) from
58515db2897SKrishnendu Sadhukhan - Sun Microsystems * available statistics.
58615db2897SKrishnendu Sadhukhan - Sun Microsystems */
58715db2897SKrishnendu Sadhukhan - Sun Microsystems static void
get_plist(pid_t ** plist,id_t ** tlist,int * list_len,int * list_index)58815db2897SKrishnendu Sadhukhan - Sun Microsystems get_plist(pid_t **plist, id_t **tlist, int *list_len, int *list_index)
58915db2897SKrishnendu Sadhukhan - Sun Microsystems {
59015db2897SKrishnendu Sadhukhan - Sun Microsystems if (!thread_mode) {
59115db2897SKrishnendu Sadhukhan - Sun Microsystems /* Per-process mode */
59215db2897SKrishnendu Sadhukhan - Sun Microsystems *list_len = lt_stat_proc_list_create(plist, NULL);
59315db2897SKrishnendu Sadhukhan - Sun Microsystems /* Search for previously selected PID */
59415db2897SKrishnendu Sadhukhan - Sun Microsystems for (*list_index = 0; *list_index < *list_len &&
59515db2897SKrishnendu Sadhukhan - Sun Microsystems (*plist)[*list_index] != selected_pid;
59615db2897SKrishnendu Sadhukhan - Sun Microsystems ++*list_index) {
59715db2897SKrishnendu Sadhukhan - Sun Microsystems }
59815db2897SKrishnendu Sadhukhan - Sun Microsystems
59915db2897SKrishnendu Sadhukhan - Sun Microsystems if (*list_index >= *list_len) {
60015db2897SKrishnendu Sadhukhan - Sun Microsystems /*
60115db2897SKrishnendu Sadhukhan - Sun Microsystems * The previously selected pid is gone.
60215db2897SKrishnendu Sadhukhan - Sun Microsystems * Select the first one.
60315db2897SKrishnendu Sadhukhan - Sun Microsystems */
60415db2897SKrishnendu Sadhukhan - Sun Microsystems *list_index = 0;
60515db2897SKrishnendu Sadhukhan - Sun Microsystems }
60615db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
60715db2897SKrishnendu Sadhukhan - Sun Microsystems /* Per-thread mode */
60815db2897SKrishnendu Sadhukhan - Sun Microsystems *list_len = lt_stat_proc_list_create(plist, tlist);
60915db2897SKrishnendu Sadhukhan - Sun Microsystems
61015db2897SKrishnendu Sadhukhan - Sun Microsystems /* Search for previously selected PID & TID */
61115db2897SKrishnendu Sadhukhan - Sun Microsystems for (*list_index = 0; *list_index < *list_len;
61215db2897SKrishnendu Sadhukhan - Sun Microsystems ++*list_index) {
61315db2897SKrishnendu Sadhukhan - Sun Microsystems if ((*plist)[*list_index] == selected_pid &&
61415db2897SKrishnendu Sadhukhan - Sun Microsystems (*tlist)[*list_index] == selected_tid) {
61515db2897SKrishnendu Sadhukhan - Sun Microsystems break;
61615db2897SKrishnendu Sadhukhan - Sun Microsystems }
61715db2897SKrishnendu Sadhukhan - Sun Microsystems }
61815db2897SKrishnendu Sadhukhan - Sun Microsystems
61915db2897SKrishnendu Sadhukhan - Sun Microsystems if (*list_index >= *list_len) {
62015db2897SKrishnendu Sadhukhan - Sun Microsystems /*
62115db2897SKrishnendu Sadhukhan - Sun Microsystems * The previously selected pid/tid is gone.
62215db2897SKrishnendu Sadhukhan - Sun Microsystems * Select the first one.
62315db2897SKrishnendu Sadhukhan - Sun Microsystems */
62415db2897SKrishnendu Sadhukhan - Sun Microsystems for (*list_index = 0;
62515db2897SKrishnendu Sadhukhan - Sun Microsystems *list_index < *list_len &&
62615db2897SKrishnendu Sadhukhan - Sun Microsystems (*plist)[*list_index] != selected_pid;
62715db2897SKrishnendu Sadhukhan - Sun Microsystems ++*list_index) {
62815db2897SKrishnendu Sadhukhan - Sun Microsystems }
62915db2897SKrishnendu Sadhukhan - Sun Microsystems }
63015db2897SKrishnendu Sadhukhan - Sun Microsystems
63115db2897SKrishnendu Sadhukhan - Sun Microsystems if (*list_index >= *list_len) {
63215db2897SKrishnendu Sadhukhan - Sun Microsystems /*
63315db2897SKrishnendu Sadhukhan - Sun Microsystems * The previously selected pid is gone.
63415db2897SKrishnendu Sadhukhan - Sun Microsystems * Select the first one
63515db2897SKrishnendu Sadhukhan - Sun Microsystems */
63615db2897SKrishnendu Sadhukhan - Sun Microsystems *list_index = 0;
63715db2897SKrishnendu Sadhukhan - Sun Microsystems }
63815db2897SKrishnendu Sadhukhan - Sun Microsystems }
63915db2897SKrishnendu Sadhukhan - Sun Microsystems }
64015db2897SKrishnendu Sadhukhan - Sun Microsystems
64115db2897SKrishnendu Sadhukhan - Sun Microsystems /* Print help message when user presses 'h' hot key */
64215db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_help(void)64315db2897SKrishnendu Sadhukhan - Sun Microsystems print_help(void)
64415db2897SKrishnendu Sadhukhan - Sun Microsystems {
64515db2897SKrishnendu Sadhukhan - Sun Microsystems const char *HELP[] = {
64615db2897SKrishnendu Sadhukhan - Sun Microsystems TITLE,
64715db2897SKrishnendu Sadhukhan - Sun Microsystems COPYRIGHT,
64815db2897SKrishnendu Sadhukhan - Sun Microsystems "",
64915db2897SKrishnendu Sadhukhan - Sun Microsystems "These single-character commands are available:",
65015db2897SKrishnendu Sadhukhan - Sun Microsystems "< - Move to previous process/thread.",
65115db2897SKrishnendu Sadhukhan - Sun Microsystems "> - Move to next process/thread.",
65215db2897SKrishnendu Sadhukhan - Sun Microsystems "q - Exit.",
65315db2897SKrishnendu Sadhukhan - Sun Microsystems "r - Refresh.",
65415db2897SKrishnendu Sadhukhan - Sun Microsystems "t - Toggle process/thread mode.",
65515db2897SKrishnendu Sadhukhan - Sun Microsystems "c - Sort by count.",
65615db2897SKrishnendu Sadhukhan - Sun Microsystems "a - Sort by average.",
65715db2897SKrishnendu Sadhukhan - Sun Microsystems "m - Sort by maximum.",
65815db2897SKrishnendu Sadhukhan - Sun Microsystems "p - Sort by percent.",
65915db2897SKrishnendu Sadhukhan - Sun Microsystems "1 - Show list by causes.",
66015db2897SKrishnendu Sadhukhan - Sun Microsystems "2 - Show list of special entries.",
66115db2897SKrishnendu Sadhukhan - Sun Microsystems "3 - Show list by synchronization objects.",
66215db2897SKrishnendu Sadhukhan - Sun Microsystems "h - Show this help.",
66315db2897SKrishnendu Sadhukhan - Sun Microsystems "",
66415db2897SKrishnendu Sadhukhan - Sun Microsystems "Press any key to continue..."
66515db2897SKrishnendu Sadhukhan - Sun Microsystems };
66615db2897SKrishnendu Sadhukhan - Sun Microsystems int i;
66715db2897SKrishnendu Sadhukhan - Sun Microsystems
66815db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
66915db2897SKrishnendu Sadhukhan - Sun Microsystems return;
67015db2897SKrishnendu Sadhukhan - Sun Microsystems }
67115db2897SKrishnendu Sadhukhan - Sun Microsystems
67215db2897SKrishnendu Sadhukhan - Sun Microsystems for (i = 0; i < sizeof (HELP) / sizeof (HELP[0]); ++i) {
67315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(stdscr, i, 0, "%s", HELP[i]);
67415db2897SKrishnendu Sadhukhan - Sun Microsystems }
67515db2897SKrishnendu Sadhukhan - Sun Microsystems
67615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
67715db2897SKrishnendu Sadhukhan - Sun Microsystems }
67815db2897SKrishnendu Sadhukhan - Sun Microsystems
67915db2897SKrishnendu Sadhukhan - Sun Microsystems /*
68015db2897SKrishnendu Sadhukhan - Sun Microsystems * Print title on screen
68115db2897SKrishnendu Sadhukhan - Sun Microsystems */
68215db2897SKrishnendu Sadhukhan - Sun Microsystems static void
print_title(void)68315db2897SKrishnendu Sadhukhan - Sun Microsystems print_title(void)
68415db2897SKrishnendu Sadhukhan - Sun Microsystems {
68515db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
68615db2897SKrishnendu Sadhukhan - Sun Microsystems return;
68715db2897SKrishnendu Sadhukhan - Sun Microsystems }
68815db2897SKrishnendu Sadhukhan - Sun Microsystems
68915db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattrset(titlebar, COLOR_PAIR(LT_COLOR_HEADER));
69015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wbkgd(titlebar, COLOR_PAIR(LT_COLOR_HEADER));
69115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(titlebar);
69215db2897SKrishnendu Sadhukhan - Sun Microsystems
69315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(titlebar, 0, (screen_width - strlen(TITLE)) / 2,
69415db2897SKrishnendu Sadhukhan - Sun Microsystems "%s", TITLE);
69515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(titlebar);
69615db2897SKrishnendu Sadhukhan - Sun Microsystems
69715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(captionbar);
69815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(captionbar, 0, 0, "%s",
69915db2897SKrishnendu Sadhukhan - Sun Microsystems " Cause "
70015db2897SKrishnendu Sadhukhan - Sun Microsystems "Count Average Maximum Percent");
70115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wrefresh(captionbar);
70215db2897SKrishnendu Sadhukhan - Sun Microsystems
70315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wattrset(hintbar, COLOR_PAIR(LT_COLOR_HEADER));
70415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) wbkgd(hintbar, COLOR_PAIR(LT_COLOR_HEADER));
70515db2897SKrishnendu Sadhukhan - Sun Microsystems }
70615db2897SKrishnendu Sadhukhan - Sun Microsystems
70715db2897SKrishnendu Sadhukhan - Sun Microsystems /*
70815db2897SKrishnendu Sadhukhan - Sun Microsystems * Handle signal from terminal resize
70915db2897SKrishnendu Sadhukhan - Sun Microsystems */
71015db2897SKrishnendu Sadhukhan - Sun Microsystems /* ARGSUSED */
71115db2897SKrishnendu Sadhukhan - Sun Microsystems static void
on_resize(int sig)71215db2897SKrishnendu Sadhukhan - Sun Microsystems on_resize(int sig)
71315db2897SKrishnendu Sadhukhan - Sun Microsystems {
71415db2897SKrishnendu Sadhukhan - Sun Microsystems lt_gpipe_break("r");
71515db2897SKrishnendu Sadhukhan - Sun Microsystems }
71615db2897SKrishnendu Sadhukhan - Sun Microsystems
71715db2897SKrishnendu Sadhukhan - Sun Microsystems /*
71815db2897SKrishnendu Sadhukhan - Sun Microsystems * Initialize display. Display will be cleared when this function returns.
71915db2897SKrishnendu Sadhukhan - Sun Microsystems */
72015db2897SKrishnendu Sadhukhan - Sun Microsystems void
lt_display_init(void)72115db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_init(void)
72215db2897SKrishnendu Sadhukhan - Sun Microsystems {
72315db2897SKrishnendu Sadhukhan - Sun Microsystems if (display_initialized) {
72415db2897SKrishnendu Sadhukhan - Sun Microsystems return;
72515db2897SKrishnendu Sadhukhan - Sun Microsystems }
72615db2897SKrishnendu Sadhukhan - Sun Microsystems
72715db2897SKrishnendu Sadhukhan - Sun Microsystems /* Window resize signal */
72815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) signal(SIGWINCH, on_resize);
72915db2897SKrishnendu Sadhukhan - Sun Microsystems
73015db2897SKrishnendu Sadhukhan - Sun Microsystems /* Initialize curses library */
73115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) initscr();
73215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) start_color();
73315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) keypad(stdscr, TRUE);
73415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) nonl();
73515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) cbreak();
73615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) noecho();
73715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) curs_set(0);
73815db2897SKrishnendu Sadhukhan - Sun Microsystems
73915db2897SKrishnendu Sadhukhan - Sun Microsystems /* Set up color pairs */
74015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) init_pair(LT_COLOR_DEFAULT, COLOR_WHITE, COLOR_BLACK);
74115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) init_pair(LT_COLOR_HEADER, COLOR_BLACK, COLOR_WHITE);
74215db2897SKrishnendu Sadhukhan - Sun Microsystems
74315db2897SKrishnendu Sadhukhan - Sun Microsystems curses_inited = TRUE;
74415db2897SKrishnendu Sadhukhan - Sun Microsystems getmaxyx(stdscr, screen_height, screen_width);
74515db2897SKrishnendu Sadhukhan - Sun Microsystems
74615db2897SKrishnendu Sadhukhan - Sun Microsystems if (screen_width < LT_WINDOW_X || screen_height < LT_WINDOW_Y) {
74715db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(stdscr, 0, 0, "Terminal size is too small.");
74815db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(stdscr, 1, 0,
74915db2897SKrishnendu Sadhukhan - Sun Microsystems "Please resize it to 80x24 or larger.");
75015db2897SKrishnendu Sadhukhan - Sun Microsystems (void) mvwprintw(stdscr, 2, 0, "Press q to quit.");
75115db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
75215db2897SKrishnendu Sadhukhan - Sun Microsystems return;
75315db2897SKrishnendu Sadhukhan - Sun Microsystems }
75415db2897SKrishnendu Sadhukhan - Sun Microsystems
75515db2897SKrishnendu Sadhukhan - Sun Microsystems /* Set up all window panes */
75615db2897SKrishnendu Sadhukhan - Sun Microsystems titlebar = subwin(stdscr, 1, screen_width, 0, 0);
75715db2897SKrishnendu Sadhukhan - Sun Microsystems captionbar = subwin(stdscr, 1, screen_width, 1, 0);
75815db2897SKrishnendu Sadhukhan - Sun Microsystems sysglobal_window = subwin(stdscr, screen_height / 2 - 1,
75915db2897SKrishnendu Sadhukhan - Sun Microsystems screen_width, 2, 0);
76015db2897SKrishnendu Sadhukhan - Sun Microsystems process_window = subwin(stdscr, screen_height / 2 - 3,
76115db2897SKrishnendu Sadhukhan - Sun Microsystems screen_width, screen_height / 2 + 1, 0);
76215db2897SKrishnendu Sadhukhan - Sun Microsystems taskbar = subwin(stdscr, 1, screen_width, screen_height - 2, 0);
76315db2897SKrishnendu Sadhukhan - Sun Microsystems hintbar = subwin(stdscr, 1, screen_width, screen_height - 1, 0);
76415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(stdscr);
76515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
76615db2897SKrishnendu Sadhukhan - Sun Microsystems
76715db2897SKrishnendu Sadhukhan - Sun Microsystems display_initialized = TRUE;
76815db2897SKrishnendu Sadhukhan - Sun Microsystems
76915db2897SKrishnendu Sadhukhan - Sun Microsystems print_title();
77015db2897SKrishnendu Sadhukhan - Sun Microsystems }
77115db2897SKrishnendu Sadhukhan - Sun Microsystems
77215db2897SKrishnendu Sadhukhan - Sun Microsystems /*
77315db2897SKrishnendu Sadhukhan - Sun Microsystems * The event loop for display. It displays data on screen and handles hotkey
77415db2897SKrishnendu Sadhukhan - Sun Microsystems * presses.
77515db2897SKrishnendu Sadhukhan - Sun Microsystems *
77615db2897SKrishnendu Sadhukhan - Sun Microsystems * Parameter :
77715db2897SKrishnendu Sadhukhan - Sun Microsystems * duration - returns after 'duration'
77815db2897SKrishnendu Sadhukhan - Sun Microsystems *
77915db2897SKrishnendu Sadhukhan - Sun Microsystems * The function also returns if user presses 'q', 'Ctrl+C' or 'r'.
78015db2897SKrishnendu Sadhukhan - Sun Microsystems *
78115db2897SKrishnendu Sadhukhan - Sun Microsystems * Return value:
78215db2897SKrishnendu Sadhukhan - Sun Microsystems * 0 - main() exits
78315db2897SKrishnendu Sadhukhan - Sun Microsystems * 1 - main() calls it again
78415db2897SKrishnendu Sadhukhan - Sun Microsystems */
78515db2897SKrishnendu Sadhukhan - Sun Microsystems int
lt_display_loop(int duration)78615db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_loop(int duration)
78715db2897SKrishnendu Sadhukhan - Sun Microsystems {
78815db2897SKrishnendu Sadhukhan - Sun Microsystems uint64_t start;
78915db2897SKrishnendu Sadhukhan - Sun Microsystems int remaining;
79015db2897SKrishnendu Sadhukhan - Sun Microsystems struct timeval timeout;
79115db2897SKrishnendu Sadhukhan - Sun Microsystems fd_set read_fd;
79215db2897SKrishnendu Sadhukhan - Sun Microsystems int need_refresh = TRUE;
79315db2897SKrishnendu Sadhukhan - Sun Microsystems pid_t *plist = NULL;
79415db2897SKrishnendu Sadhukhan - Sun Microsystems id_t *tlist = NULL;
79515db2897SKrishnendu Sadhukhan - Sun Microsystems int list_len = 0;
79615db2897SKrishnendu Sadhukhan - Sun Microsystems int list_index = 0;
79715db2897SKrishnendu Sadhukhan - Sun Microsystems int retval = 1;
79815db2897SKrishnendu Sadhukhan - Sun Microsystems int next_snap;
79915db2897SKrishnendu Sadhukhan - Sun Microsystems int gpipe;
80015db2897SKrishnendu Sadhukhan - Sun Microsystems
80115db2897SKrishnendu Sadhukhan - Sun Microsystems start = lt_millisecond();
80215db2897SKrishnendu Sadhukhan - Sun Microsystems gpipe = lt_gpipe_readfd();
80315db2897SKrishnendu Sadhukhan - Sun Microsystems
80415db2897SKrishnendu Sadhukhan - Sun Microsystems if (!show_help) {
80515db2897SKrishnendu Sadhukhan - Sun Microsystems print_hint(NULL);
80615db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
80715db2897SKrishnendu Sadhukhan - Sun Microsystems }
80815db2897SKrishnendu Sadhukhan - Sun Microsystems
80915db2897SKrishnendu Sadhukhan - Sun Microsystems get_plist(&plist, &tlist, &list_len, &list_index);
81015db2897SKrishnendu Sadhukhan - Sun Microsystems
81115db2897SKrishnendu Sadhukhan - Sun Microsystems for (;;) {
812*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems if (need_refresh && !show_help) {
813*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems if (list_len != 0) {
814*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems if (!thread_mode) {
815*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_taskbar_process(plist, list_len,
816*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems list_index);
817*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_process(plist[list_index]);
818*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems } else {
819*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_taskbar_thread(plist, tlist,
820*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems list_len, list_index);
821*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_thread(plist[list_index],
822*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems tlist[list_index]);
823*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems }
82415db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
825*a9c12afdSKrishnendu Sadhukhan - Sun Microsystems print_empty_process_bar();
82615db2897SKrishnendu Sadhukhan - Sun Microsystems }
82715db2897SKrishnendu Sadhukhan - Sun Microsystems }
82815db2897SKrishnendu Sadhukhan - Sun Microsystems
82915db2897SKrishnendu Sadhukhan - Sun Microsystems need_refresh = TRUE; /* Usually we need refresh. */
83015db2897SKrishnendu Sadhukhan - Sun Microsystems remaining = duration - (int)(lt_millisecond() - start);
83115db2897SKrishnendu Sadhukhan - Sun Microsystems
83215db2897SKrishnendu Sadhukhan - Sun Microsystems if (remaining <= 0) {
83315db2897SKrishnendu Sadhukhan - Sun Microsystems break;
83415db2897SKrishnendu Sadhukhan - Sun Microsystems }
83515db2897SKrishnendu Sadhukhan - Sun Microsystems
83615db2897SKrishnendu Sadhukhan - Sun Microsystems /* Embedded dtrace snap action here. */
83715db2897SKrishnendu Sadhukhan - Sun Microsystems next_snap = lt_dtrace_work(0);
83815db2897SKrishnendu Sadhukhan - Sun Microsystems
83915db2897SKrishnendu Sadhukhan - Sun Microsystems if (next_snap == 0) {
84015db2897SKrishnendu Sadhukhan - Sun Microsystems /*
84115db2897SKrishnendu Sadhukhan - Sun Microsystems * Just did a snap, check time for the next one.
84215db2897SKrishnendu Sadhukhan - Sun Microsystems */
84315db2897SKrishnendu Sadhukhan - Sun Microsystems next_snap = lt_dtrace_work(0);
84415db2897SKrishnendu Sadhukhan - Sun Microsystems }
84515db2897SKrishnendu Sadhukhan - Sun Microsystems
84615db2897SKrishnendu Sadhukhan - Sun Microsystems if (next_snap > 0 && remaining > next_snap) {
84715db2897SKrishnendu Sadhukhan - Sun Microsystems remaining = next_snap;
84815db2897SKrishnendu Sadhukhan - Sun Microsystems }
84915db2897SKrishnendu Sadhukhan - Sun Microsystems
85015db2897SKrishnendu Sadhukhan - Sun Microsystems timeout.tv_sec = remaining / 1000;
85115db2897SKrishnendu Sadhukhan - Sun Microsystems timeout.tv_usec = (remaining % 1000) * 1000;
85215db2897SKrishnendu Sadhukhan - Sun Microsystems
85315db2897SKrishnendu Sadhukhan - Sun Microsystems FD_ZERO(&read_fd);
85415db2897SKrishnendu Sadhukhan - Sun Microsystems FD_SET(0, &read_fd);
85515db2897SKrishnendu Sadhukhan - Sun Microsystems FD_SET(gpipe, &read_fd);
85615db2897SKrishnendu Sadhukhan - Sun Microsystems
85715db2897SKrishnendu Sadhukhan - Sun Microsystems /* Wait for keyboard input, or signal from gpipe */
85815db2897SKrishnendu Sadhukhan - Sun Microsystems if (select(gpipe + 1, &read_fd, NULL, NULL, &timeout) > 0) {
85915db2897SKrishnendu Sadhukhan - Sun Microsystems int k = 0;
86015db2897SKrishnendu Sadhukhan - Sun Microsystems
86115db2897SKrishnendu Sadhukhan - Sun Microsystems if (FD_ISSET(gpipe, &read_fd)) {
86215db2897SKrishnendu Sadhukhan - Sun Microsystems /* Data from pipe has priority */
86315db2897SKrishnendu Sadhukhan - Sun Microsystems char ch;
86415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) read(gpipe, &ch, 1);
86515db2897SKrishnendu Sadhukhan - Sun Microsystems k = ch; /* Need this for big-endianness */
86615db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
86715db2897SKrishnendu Sadhukhan - Sun Microsystems k = getch();
86815db2897SKrishnendu Sadhukhan - Sun Microsystems }
86915db2897SKrishnendu Sadhukhan - Sun Microsystems
87015db2897SKrishnendu Sadhukhan - Sun Microsystems /*
87115db2897SKrishnendu Sadhukhan - Sun Microsystems * Check if we need to update the hint line whenever we
87215db2897SKrishnendu Sadhukhan - Sun Microsystems * get a chance.
87315db2897SKrishnendu Sadhukhan - Sun Microsystems * NOTE: current implementation depends on
87415db2897SKrishnendu Sadhukhan - Sun Microsystems * g_config.lt_cfg_snap_interval, but it's OK because it
87515db2897SKrishnendu Sadhukhan - Sun Microsystems * doesn't have to be precise.
87615db2897SKrishnendu Sadhukhan - Sun Microsystems */
87715db2897SKrishnendu Sadhukhan - Sun Microsystems print_hint(NULL);
87815db2897SKrishnendu Sadhukhan - Sun Microsystems /*
87915db2897SKrishnendu Sadhukhan - Sun Microsystems * If help is on display right now, and a key press
88015db2897SKrishnendu Sadhukhan - Sun Microsystems * happens, we need to clear the help and continue.
88115db2897SKrishnendu Sadhukhan - Sun Microsystems */
88215db2897SKrishnendu Sadhukhan - Sun Microsystems if (show_help) {
88315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(stdscr);
88415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
88515db2897SKrishnendu Sadhukhan - Sun Microsystems print_title();
88615db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
88715db2897SKrishnendu Sadhukhan - Sun Microsystems show_help = FALSE;
88815db2897SKrishnendu Sadhukhan - Sun Microsystems /* Drop this key and continue */
88915db2897SKrishnendu Sadhukhan - Sun Microsystems continue;
89015db2897SKrishnendu Sadhukhan - Sun Microsystems }
89115db2897SKrishnendu Sadhukhan - Sun Microsystems
89215db2897SKrishnendu Sadhukhan - Sun Microsystems switch (k) {
89315db2897SKrishnendu Sadhukhan - Sun Microsystems case 'Q':
89415db2897SKrishnendu Sadhukhan - Sun Microsystems case 'q':
89515db2897SKrishnendu Sadhukhan - Sun Microsystems retval = 0;
89615db2897SKrishnendu Sadhukhan - Sun Microsystems goto quit;
89715db2897SKrishnendu Sadhukhan - Sun Microsystems case 'R':
89815db2897SKrishnendu Sadhukhan - Sun Microsystems case 'r':
89915db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_deinit();
90015db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_init();
90115db2897SKrishnendu Sadhukhan - Sun Microsystems goto quit;
90215db2897SKrishnendu Sadhukhan - Sun Microsystems case 'H':
90315db2897SKrishnendu Sadhukhan - Sun Microsystems case 'h':
90415db2897SKrishnendu Sadhukhan - Sun Microsystems show_help = TRUE;
90515db2897SKrishnendu Sadhukhan - Sun Microsystems (void) werase(stdscr);
90615db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
90715db2897SKrishnendu Sadhukhan - Sun Microsystems print_help();
90815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
90915db2897SKrishnendu Sadhukhan - Sun Microsystems case ',':
91015db2897SKrishnendu Sadhukhan - Sun Microsystems case '<':
91115db2897SKrishnendu Sadhukhan - Sun Microsystems case KEY_LEFT:
91215db2897SKrishnendu Sadhukhan - Sun Microsystems --list_index;
91315db2897SKrishnendu Sadhukhan - Sun Microsystems
91415db2897SKrishnendu Sadhukhan - Sun Microsystems if (list_index < 0) {
91515db2897SKrishnendu Sadhukhan - Sun Microsystems list_index = 0;
91615db2897SKrishnendu Sadhukhan - Sun Microsystems }
91715db2897SKrishnendu Sadhukhan - Sun Microsystems
91815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
91915db2897SKrishnendu Sadhukhan - Sun Microsystems case '.':
92015db2897SKrishnendu Sadhukhan - Sun Microsystems case '>':
92115db2897SKrishnendu Sadhukhan - Sun Microsystems case KEY_RIGHT:
92215db2897SKrishnendu Sadhukhan - Sun Microsystems ++list_index;
92315db2897SKrishnendu Sadhukhan - Sun Microsystems
92415db2897SKrishnendu Sadhukhan - Sun Microsystems if (list_index >= list_len) {
92515db2897SKrishnendu Sadhukhan - Sun Microsystems list_index = list_len - 1;
92615db2897SKrishnendu Sadhukhan - Sun Microsystems }
92715db2897SKrishnendu Sadhukhan - Sun Microsystems
92815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
92915db2897SKrishnendu Sadhukhan - Sun Microsystems case 'a':
93015db2897SKrishnendu Sadhukhan - Sun Microsystems case 'A':
93115db2897SKrishnendu Sadhukhan - Sun Microsystems sort_type = LT_SORT_AVG;
93215db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
93315db2897SKrishnendu Sadhukhan - Sun Microsystems break;
93415db2897SKrishnendu Sadhukhan - Sun Microsystems case 'p':
93515db2897SKrishnendu Sadhukhan - Sun Microsystems case 'P':
93615db2897SKrishnendu Sadhukhan - Sun Microsystems sort_type = LT_SORT_TOTAL;
93715db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
93815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
93915db2897SKrishnendu Sadhukhan - Sun Microsystems case 'm':
94015db2897SKrishnendu Sadhukhan - Sun Microsystems case 'M':
94115db2897SKrishnendu Sadhukhan - Sun Microsystems sort_type = LT_SORT_MAX;
94215db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
94315db2897SKrishnendu Sadhukhan - Sun Microsystems break;
94415db2897SKrishnendu Sadhukhan - Sun Microsystems case 'c':
94515db2897SKrishnendu Sadhukhan - Sun Microsystems case 'C':
94615db2897SKrishnendu Sadhukhan - Sun Microsystems sort_type = LT_SORT_COUNT;
94715db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
94815db2897SKrishnendu Sadhukhan - Sun Microsystems break;
94915db2897SKrishnendu Sadhukhan - Sun Microsystems case 't':
95015db2897SKrishnendu Sadhukhan - Sun Microsystems case 'T':
95115db2897SKrishnendu Sadhukhan - Sun Microsystems if (plist != NULL) {
95215db2897SKrishnendu Sadhukhan - Sun Microsystems selected_pid = plist[list_index];
95315db2897SKrishnendu Sadhukhan - Sun Microsystems }
95415db2897SKrishnendu Sadhukhan - Sun Microsystems
95515db2897SKrishnendu Sadhukhan - Sun Microsystems selected_tid = INVALID_TID;
95615db2897SKrishnendu Sadhukhan - Sun Microsystems thread_mode = !thread_mode;
95715db2897SKrishnendu Sadhukhan - Sun Microsystems get_plist(&plist, &tlist,
95815db2897SKrishnendu Sadhukhan - Sun Microsystems &list_len, &list_index);
95915db2897SKrishnendu Sadhukhan - Sun Microsystems break;
96015db2897SKrishnendu Sadhukhan - Sun Microsystems case '1':
96115db2897SKrishnendu Sadhukhan - Sun Microsystems case '!':
96215db2897SKrishnendu Sadhukhan - Sun Microsystems current_list_type = LT_LIST_CAUSE;
96315db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
96415db2897SKrishnendu Sadhukhan - Sun Microsystems break;
96515db2897SKrishnendu Sadhukhan - Sun Microsystems case '2':
96615db2897SKrishnendu Sadhukhan - Sun Microsystems case '@':
96715db2897SKrishnendu Sadhukhan - Sun Microsystems if (g_config.lt_cfg_low_overhead_mode) {
96815db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_error("Switching mode is "
96915db2897SKrishnendu Sadhukhan - Sun Microsystems "not available for '-f low'.");
97015db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
97115db2897SKrishnendu Sadhukhan - Sun Microsystems current_list_type = LT_LIST_SPECIALS;
97215db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
97315db2897SKrishnendu Sadhukhan - Sun Microsystems }
97415db2897SKrishnendu Sadhukhan - Sun Microsystems
97515db2897SKrishnendu Sadhukhan - Sun Microsystems break;
97615db2897SKrishnendu Sadhukhan - Sun Microsystems case '3':
97715db2897SKrishnendu Sadhukhan - Sun Microsystems case '#':
97815db2897SKrishnendu Sadhukhan - Sun Microsystems if (g_config.lt_cfg_trace_syncobj) {
97915db2897SKrishnendu Sadhukhan - Sun Microsystems current_list_type = LT_LIST_SOBJ;
98015db2897SKrishnendu Sadhukhan - Sun Microsystems print_sysglobal();
98115db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (g_config.lt_cfg_low_overhead_mode) {
98215db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_error("Switching mode is "
98315db2897SKrishnendu Sadhukhan - Sun Microsystems "not available for '-f low'.");
98415db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
98515db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_error("Tracing "
98615db2897SKrishnendu Sadhukhan - Sun Microsystems "synchronization objects is "
98715db2897SKrishnendu Sadhukhan - Sun Microsystems "disabled.");
98815db2897SKrishnendu Sadhukhan - Sun Microsystems }
98915db2897SKrishnendu Sadhukhan - Sun Microsystems
99015db2897SKrishnendu Sadhukhan - Sun Microsystems break;
99115db2897SKrishnendu Sadhukhan - Sun Microsystems default:
99215db2897SKrishnendu Sadhukhan - Sun Microsystems /* Wake up for nothing; no refresh is needed */
99315db2897SKrishnendu Sadhukhan - Sun Microsystems need_refresh = FALSE;
99415db2897SKrishnendu Sadhukhan - Sun Microsystems break;
99515db2897SKrishnendu Sadhukhan - Sun Microsystems }
99615db2897SKrishnendu Sadhukhan - Sun Microsystems } else {
99715db2897SKrishnendu Sadhukhan - Sun Microsystems need_refresh = FALSE;
99815db2897SKrishnendu Sadhukhan - Sun Microsystems }
99915db2897SKrishnendu Sadhukhan - Sun Microsystems }
100015db2897SKrishnendu Sadhukhan - Sun Microsystems
100115db2897SKrishnendu Sadhukhan - Sun Microsystems quit:
100215db2897SKrishnendu Sadhukhan - Sun Microsystems if (plist != NULL) {
100315db2897SKrishnendu Sadhukhan - Sun Microsystems selected_pid = plist[list_index];
100415db2897SKrishnendu Sadhukhan - Sun Microsystems }
100515db2897SKrishnendu Sadhukhan - Sun Microsystems
100615db2897SKrishnendu Sadhukhan - Sun Microsystems if (tlist != NULL) {
100715db2897SKrishnendu Sadhukhan - Sun Microsystems selected_tid = tlist[list_index];
100815db2897SKrishnendu Sadhukhan - Sun Microsystems }
100915db2897SKrishnendu Sadhukhan - Sun Microsystems
101015db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_proc_list_free(plist, tlist);
101115db2897SKrishnendu Sadhukhan - Sun Microsystems
101215db2897SKrishnendu Sadhukhan - Sun Microsystems return (retval);
101315db2897SKrishnendu Sadhukhan - Sun Microsystems }
101415db2897SKrishnendu Sadhukhan - Sun Microsystems
101515db2897SKrishnendu Sadhukhan - Sun Microsystems /*
101615db2897SKrishnendu Sadhukhan - Sun Microsystems * Clean up display.
101715db2897SKrishnendu Sadhukhan - Sun Microsystems */
101815db2897SKrishnendu Sadhukhan - Sun Microsystems void
lt_display_deinit(void)101915db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_deinit(void)
102015db2897SKrishnendu Sadhukhan - Sun Microsystems {
102115db2897SKrishnendu Sadhukhan - Sun Microsystems if (curses_inited) {
102215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) clear();
102315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) refresh();
102415db2897SKrishnendu Sadhukhan - Sun Microsystems (void) endwin();
102515db2897SKrishnendu Sadhukhan - Sun Microsystems }
102615db2897SKrishnendu Sadhukhan - Sun Microsystems
102715db2897SKrishnendu Sadhukhan - Sun Microsystems titlebar = NULL;
102815db2897SKrishnendu Sadhukhan - Sun Microsystems captionbar = NULL;
102915db2897SKrishnendu Sadhukhan - Sun Microsystems sysglobal_window = NULL;
103015db2897SKrishnendu Sadhukhan - Sun Microsystems taskbar = NULL;
103115db2897SKrishnendu Sadhukhan - Sun Microsystems process_window = NULL;
103215db2897SKrishnendu Sadhukhan - Sun Microsystems hintbar = NULL;
103315db2897SKrishnendu Sadhukhan - Sun Microsystems screen_width = 1;
103415db2897SKrishnendu Sadhukhan - Sun Microsystems screen_height = 1;
103515db2897SKrishnendu Sadhukhan - Sun Microsystems
103615db2897SKrishnendu Sadhukhan - Sun Microsystems display_initialized = FALSE;
103715db2897SKrishnendu Sadhukhan - Sun Microsystems curses_inited = FALSE;
103815db2897SKrishnendu Sadhukhan - Sun Microsystems }
103915db2897SKrishnendu Sadhukhan - Sun Microsystems
104015db2897SKrishnendu Sadhukhan - Sun Microsystems /*
104115db2897SKrishnendu Sadhukhan - Sun Microsystems * Print message when display error happens.
104215db2897SKrishnendu Sadhukhan - Sun Microsystems */
104315db2897SKrishnendu Sadhukhan - Sun Microsystems /* ARGSUSED */
104415db2897SKrishnendu Sadhukhan - Sun Microsystems void
lt_display_error(const char * fmt,...)104515db2897SKrishnendu Sadhukhan - Sun Microsystems lt_display_error(const char *fmt, ...)
104615db2897SKrishnendu Sadhukhan - Sun Microsystems {
104715db2897SKrishnendu Sadhukhan - Sun Microsystems va_list vl;
104815db2897SKrishnendu Sadhukhan - Sun Microsystems char tmp[81];
104915db2897SKrishnendu Sadhukhan - Sun Microsystems int l;
105015db2897SKrishnendu Sadhukhan - Sun Microsystems
105115db2897SKrishnendu Sadhukhan - Sun Microsystems va_start(vl, fmt);
105215db2897SKrishnendu Sadhukhan - Sun Microsystems (void) vsnprintf(tmp, sizeof (tmp), fmt, vl);
105315db2897SKrishnendu Sadhukhan - Sun Microsystems va_end(vl);
105415db2897SKrishnendu Sadhukhan - Sun Microsystems
105515db2897SKrishnendu Sadhukhan - Sun Microsystems l = strlen(tmp);
105615db2897SKrishnendu Sadhukhan - Sun Microsystems
105715db2897SKrishnendu Sadhukhan - Sun Microsystems while (l > 0 && (tmp[l - 1] == '\n' || tmp[l - 1] == '\r')) {
105815db2897SKrishnendu Sadhukhan - Sun Microsystems tmp[l - 1] = '\0';
105915db2897SKrishnendu Sadhukhan - Sun Microsystems --l;
106015db2897SKrishnendu Sadhukhan - Sun Microsystems }
106115db2897SKrishnendu Sadhukhan - Sun Microsystems
106215db2897SKrishnendu Sadhukhan - Sun Microsystems if (!display_initialized) {
106315db2897SKrishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "%s\n", tmp);
106415db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (!show_help) {
106515db2897SKrishnendu Sadhukhan - Sun Microsystems print_hint(tmp);
106615db2897SKrishnendu Sadhukhan - Sun Microsystems }
106715db2897SKrishnendu Sadhukhan - Sun Microsystems
106815db2897SKrishnendu Sadhukhan - Sun Microsystems }
1069