diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c index 88c5f1a803206189aec36924b240e28b00d6b2cd..002221696caa0b4e451de614adb6caee363fdaf6 100644 --- a/src/smap/configure_functions.c +++ b/src/smap/configure_functions.c @@ -861,6 +861,6 @@ void get_command(void) pa_system_ptr->xcord = 1; pa_system_ptr->ycord = 1; print_date(); - get_job(); + get_job(0); return; } diff --git a/src/smap/job_functions.c b/src/smap/job_functions.c index c6f997450156e8b60eb85d20c97bea517a8edc04..9a5087c02725e94173a7e212a84a34e714faa89b 100644 --- a/src/smap/job_functions.c +++ b/src/smap/job_functions.c @@ -32,10 +32,11 @@ static void _print_header_job(void); static int _print_text_job(job_info_t * job_ptr); -extern void get_job(void) +extern void get_job() { - int error_code = -1, i, j, recs, count = 0; - + int error_code = -1, i, j, recs; + static int printed_jobs = 0; + static int count = 0; static job_info_msg_t *job_info_ptr = NULL, *new_job_ptr = NULL; job_info_t job; @@ -69,6 +70,11 @@ extern void get_job(void) else recs = 0; + if(!params.commandline) + if((text_line_cnt+printed_jobs) > count) + text_line_cnt--; + printed_jobs = 0; + count = 0; for (i = 0; i < recs; i++) { job = new_job_ptr->job_array[i]; @@ -87,31 +93,62 @@ extern void get_job(void) job.node_inx[j + 1], count); j += 2; } - job.num_procs = (int) letters[count%62]; - wattron(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); - _print_text_job(&job); - wattroff(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); + + if(!params.commandline) { + if((count>=text_line_cnt) + && (printed_jobs + < (pa_system_ptr->text_win->_maxy-3))) { + job.num_procs = (int)letters[count%62]; + wattron(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + _print_text_job(&job); + wattroff(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + printed_jobs++; + } + } else { + job.num_procs = (int)letters[count%62]; + wattron(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + _print_text_job(&job); + wattroff(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + } count++; } if(count==128) count=0; } - + for (i = 0; i < recs; i++) { job = new_job_ptr->job_array[i]; if (job.job_state != JOB_PENDING) continue; /* job has completed */ - - job.nodes = "waiting..."; - job.num_procs = (int) letters[count%62]; - wattron(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); - _print_text_job(&job); - wattroff(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); + + if(!params.commandline) { + if((count>=text_line_cnt) + && (printed_jobs + < (pa_system_ptr->text_win->_maxy-3))) { + job.nodes = "waiting..."; + job.num_procs = (int) letters[count%62]; + wattron(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + _print_text_job(&job); + wattroff(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + printed_jobs++; + } + } else { + job.nodes = "waiting..."; + job.num_procs = (int) letters[count%62]; + wattron(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + _print_text_job(&job); + wattroff(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + printed_jobs++; + } count++; if(count==128) @@ -121,6 +158,8 @@ extern void get_job(void) if (params.commandline && params.iterate) printf("\n"); + pa_system_ptr->ycord++; + job_info_ptr = new_job_ptr; return; } diff --git a/src/smap/opts.c b/src/smap/opts.c index 901d51156341754b3c0a93c56a3b1ba794735949..94beea99be51baea334e1fa6d2ae77414a02332c 100644 --- a/src/smap/opts.c +++ b/src/smap/opts.c @@ -34,7 +34,7 @@ static void _usage(void); /* * parse_command_line, fill in params data structure with data */ -void parse_command_line(int argc, char *argv[]) +extern void parse_command_line(int argc, char *argv[]) { int opt_char; int option_index; @@ -111,7 +111,7 @@ void parse_command_line(int argc, char *argv[]) } -void snprint_time(char *buf, size_t buf_size, time_t time) +extern void snprint_time(char *buf, size_t buf_size, time_t time) { if (time == INFINITE) { snprintf(buf, buf_size, "UNLIMITED"); @@ -136,7 +136,7 @@ void snprint_time(char *buf, size_t buf_size, time_t time) } } -void print_date() +extern void print_date() { pa_system_ptr->now_time = time(NULL); @@ -150,7 +150,7 @@ void print_date() } } -void clear_window(WINDOW *win) +extern void clear_window(WINDOW *win) { int x,y; for(x=0; x<=win->_maxx; x++) diff --git a/src/smap/partition_functions.c b/src/smap/partition_functions.c index c11a53b59c8a5422555d5597620fa3e410fd0587..8af0c6ee33642aa8178db041760ad9acd7d4858b 100644 --- a/src/smap/partition_functions.c +++ b/src/smap/partition_functions.c @@ -68,7 +68,7 @@ static int _in_slurm_partition(db2_block_info_t *db2_info_ptr, static int _print_rest(db2_block_info_t *block_ptr, int *count); #endif -void get_slurm_part(void) +extern void get_slurm_part() { int error_code, i, j, recs, count = 0; static partition_info_msg_t *part_info_ptr = NULL; @@ -98,19 +98,22 @@ void get_slurm_part(void) pa_system_ptr->ycord++; } else { printf("slurm_load_partitions: %s", - slurm_strerror(slurm_get_errno())); + slurm_strerror(slurm_get_errno())); } } return; } - + if (!params.no_header) _print_header_part(); - + if (new_part_ptr) recs = new_part_ptr->record_count; else recs = 0; + if (!params.commandline) + if((recs - text_line_cnt) < (pa_system_ptr->text_win->_maxy-3)) + text_line_cnt--; for (i = 0; i < recs; i++) { j = 0; @@ -125,13 +128,15 @@ void get_slurm_part(void) part.node_inx[j + 1], count); j += 2; } - part.root_only = - (int) letters[count%62]; - wattron(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); - _print_text_part(&part, NULL); - wattroff(pa_system_ptr->text_win, - COLOR_PAIR(colors[count%6])); + if(i>=text_line_cnt) { + part.root_only = + (int) letters[count%62]; + wattron(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + _print_text_part(&part, NULL); + wattroff(pa_system_ptr->text_win, + COLOR_PAIR(colors[count%6])); + } count++; } @@ -144,7 +149,7 @@ void get_slurm_part(void) return; } -void get_bgl_part(void) +extern void get_bgl_part() { #ifdef HAVE_BGL int error_code, i, j, recs=0, count = 0; @@ -225,6 +230,11 @@ void get_bgl_part(void) return; } } + if (!params.commandline) + if((new_bgl_ptr->record_count - text_line_cnt) + < (pa_system_ptr->text_win->_maxy-3)) + text_line_cnt--; + for (i=0; i<new_bgl_ptr->record_count; i++) { block_ptr = xmalloc(sizeof(db2_block_info_t)); list_append(block_list, block_ptr); @@ -251,6 +261,7 @@ void get_bgl_part(void) recs = new_part_ptr->record_count; else recs = 0; + for (i = 0; i < recs; i++) { j = 0; part = new_part_ptr->partition_array[i]; @@ -282,23 +293,36 @@ void get_bgl_part(void) itr = list_iterator_create(block_list); while ((block_ptr = (db2_block_info_t*) list_next(itr)) != NULL) { - if(_in_slurm_partition(block_ptr, start, end)) + if(_in_slurm_partition(block_ptr, + start, + end)) { block_ptr->slurm_part_name = xstrdup(part.name); + } } list_iterator_destroy(itr); } } - /* Report any BGL Blocks not in a SLURM partition */ + /* Report the BGL Blocks */ if (block_list) { itr = list_iterator_create(block_list); while ((block_ptr = (db2_block_info_t*) - list_next(itr)) != NULL) + list_next(itr)) != NULL) { + if (params.commandline) + block_ptr->printed = 1; + else + if(count>=text_line_cnt) + block_ptr->printed = 1; + _print_rest(block_ptr, &count); + + } + list_iterator_destroy(itr); } + if (params.commandline && params.iterate) printf("\n"); @@ -699,13 +723,10 @@ static int _in_slurm_partition(db2_block_info_t *db2_info_ptr, static int _print_rest(db2_block_info_t *block_ptr, int *count) { - //static rm_BGL_t *bgl = NULL; partition_info_t part; db2_block_info_t *db2_info_ptr = NULL; ListIterator itr; int set = 0; - if (block_ptr->printed) - return SLURM_SUCCESS; part.total_nodes = 0; @@ -763,14 +784,16 @@ static int _print_rest(db2_block_info_t *block_ptr, int *count) else part.name = "no part"; + if (!block_ptr->printed) + return SLURM_SUCCESS; part.allow_groups = block_ptr->nodes; - part.root_only = (int) letters[block_ptr->letter_num%62]; - + part.root_only = (int) letters[block_ptr->letter_num%62]; wattron(pa_system_ptr->text_win, COLOR_PAIR(colors[block_ptr->letter_num%6])); _print_text_part(&part, block_ptr); wattroff(pa_system_ptr->text_win, COLOR_PAIR(colors[block_ptr->letter_num%6])); + return SLURM_SUCCESS; } #endif diff --git a/src/smap/smap.c b/src/smap/smap.c index 0adea108cdf855c409365a418e005d97a7433fd9..51601b34c2cd7b3b96b7a345363579425cac6f68 100644 --- a/src/smap/smap.c +++ b/src/smap/smap.c @@ -32,15 +32,20 @@ #include <signal.h> #include "src/smap/smap.h" +#ifdef HAVE_BGL #define MIN_SCREEN_WIDTH 92 - +#else +#define MIN_SCREEN_WIDTH 72 +#endif /******************** * Global Variables * ********************/ +int text_line_cnt = 0; + smap_parameters_t params; int quiet_flag = 0; -int line_cnt = 0; +int grid_line_cnt = 0; int max_display; /************ @@ -50,9 +55,6 @@ int max_display; static int _get_option(); static void *_resize_handler(int sig); static int _set_pairs(); -#ifndef HAVE_BGL -static int _scroll_grid(int dir); -#endif /* HAVE_BGL */ int main(int argc, char *argv[]) { @@ -201,7 +203,6 @@ part_fini: _get_option(); redraw: - line_cnt = 0; clear_window(pa_system_ptr->text_win); clear_window(pa_system_ptr->grid_win); doupdate(); @@ -247,7 +248,8 @@ part_fini: box(pa_system_ptr->text_win, 0, 0); wnoutrefresh(pa_system_ptr->text_win); - print_grid(0); + print_grid(grid_line_cnt* + (pa_system_ptr->grid_win->_maxx-1)); box(pa_system_ptr->grid_win, 0, 0); wnoutrefresh(pa_system_ptr->grid_win); @@ -287,7 +289,7 @@ part_fini: } } } - scrolling_grid: + if (params.iterate) { for (i = 0; i < params.iterate; i++) { @@ -295,8 +297,6 @@ part_fini: if(!params.commandline) { if ((rc = _get_option()) == 1) goto redraw; - else if (rc == 2) - goto scrolling_grid; else if (pa_system_ptr-> resize_screen) { pa_system_ptr-> @@ -326,16 +326,40 @@ static int _get_option() ch = getch(); switch (ch) { + case KEY_RIGHT: + case '-': + case '_': + text_line_cnt++; + return 1; + break; + case KEY_LEFT: + case '=': + case '+': + text_line_cnt--; + if(text_line_cnt<0) { + text_line_cnt = 0; + return 0; + + } + return 1; + break; + case 's': + text_line_cnt = 0; + grid_line_cnt = 0; params.display = SLURMPART; return 1; break; case 'j': + text_line_cnt = 0; + grid_line_cnt = 0; params.display = JOBS; return 1; break; #ifdef HAVE_BGL case 'b': + text_line_cnt = 0; + grid_line_cnt = 0; params.display = BGLPART; return 1; break; @@ -348,22 +372,23 @@ static int _get_option() #ifndef HAVE_BGL case 'u': case KEY_UP: - line_cnt--; - if(line_cnt<0) - line_cnt = 0; - _scroll_grid(line_cnt*(pa_system_ptr->grid_win->_maxx-1)); - return 2; + grid_line_cnt--; + if(grid_line_cnt<0) { + grid_line_cnt = 0; + return 0; + } + return 1; break; case 'd': case KEY_DOWN: - if((((line_cnt-1)*(pa_system_ptr->grid_win->_maxx-1)) + + grid_line_cnt++; + if((((grid_line_cnt-2)*(pa_system_ptr->grid_win->_maxx-1)) + max_display) > DIM_SIZE[X]) { - line_cnt--; - return 2; + grid_line_cnt--; + return 0; } - line_cnt++; - _scroll_grid(line_cnt*(pa_system_ptr->grid_win->_maxx-1)); - return 2; + + return 1; break; #endif case 'q': @@ -446,7 +471,7 @@ static void *_resize_handler(int sig) #endif } - print_grid(0); + print_grid(grid_line_cnt*(pa_system_ptr->grid_win->_maxx-1)); box(pa_system_ptr->text_win, 0, 0); box(pa_system_ptr->grid_win, 0, 0); wnoutrefresh(pa_system_ptr->text_win); @@ -482,13 +507,3 @@ static int _set_pairs() } return 1; } - -#ifndef HAVE_BGL -static int _scroll_grid(int dir) -{ - print_grid(dir); - wnoutrefresh(pa_system_ptr->grid_win); - doupdate(); - return 1; -} -#endif /* HAVE_BGL */ diff --git a/src/smap/smap.h b/src/smap/smap.h index d24185c1aefda1b93382cc2f414ac88e0b6d21f5..2aa2879055ae7306a7df78d6a918619990d5883e 100644 --- a/src/smap/smap.h +++ b/src/smap/smap.h @@ -100,26 +100,27 @@ typedef struct { extern smap_parameters_t params; extern int DIM_SIZE[PA_SYSTEM_DIMENSIONS]; +extern int text_line_cnt; -void parse_command_line(int argc, char *argv[]); +extern void parse_command_line(int argc, char *argv[]); extern pa_system_t *pa_system_ptr; extern int quiet_flag; -void init_grid(node_info_msg_t *node_info_ptr); +extern void init_grid(node_info_msg_t *node_info_ptr); extern int set_grid(int start, int end, int count); extern int set_grid_bgl(int *start, int *end, int count, int set); extern void print_grid(int dir); -void parse_command_line(int argc, char *argv[]); -void snprint_time(char *buf, size_t buf_size, time_t time); -void print_date(); -void clear_window(WINDOW *win); +extern void parse_command_line(int argc, char *argv[]); +extern void snprint_time(char *buf, size_t buf_size, time_t time); +extern void print_date(); +extern void clear_window(WINDOW *win); -void get_slurm_part(); -void get_bgl_part(); -void get_job(); -void get_command(); +extern void get_slurm_part(); +extern void get_bgl_part(); +extern void get_job(); +extern void get_command(); #endif