Changeset 2d37006 in mainline for uspace/app/top/screen.c


Ignore:
Timestamp:
2012-04-15T01:09:11Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6484602
Parents:
d517c5b
Message:

top: make warnings more visible

  • warnings stay on screen for 2–3 seconds, not immediately disappear
  • warnings are shown in a different style
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/top/screen.c

    rd517c5b r2d37006  
    3737
    3838#include <stdio.h>
     39#include <stdlib.h>
    3940#include <io/console.h>
    4041#include <io/style.h>
     
    4849#define USEC_COUNT  1000000
    4950
    50 static sysarg_t warn_col = 0;
    51 static sysarg_t warn_row = 0;
    5251static suseconds_t timeleft = 0;
    5352
    5453console_ctrl_t *console;
    5554
     55static sysarg_t warning_col = 0;
     56static sysarg_t warning_row = 0;
     57static suseconds_t warning_timeleft = 0;
     58static char *warning_text = NULL;
     59
    5660static void screen_style_normal(void)
    5761{
     
    6468        console_flush(console);
    6569        console_set_style(console, STYLE_INVERTED);
     70}
     71
     72static void screen_style_emphasis(void)
     73{
     74        console_flush(console);
     75        console_set_style(console, STYLE_EMPHASIS);
    6676}
    6777
     
    126136void screen_done(void)
    127137{
     138        free(warning_text);
     139        warning_text = NULL;
     140
    128141        screen_restart(true);
    129142       
     
    484497}
    485498
     499static void print_warning(void)
     500{
     501        screen_get_pos(&warning_col, &warning_row);
     502        if (warning_timeleft > 0) {
     503                screen_style_emphasis();
     504                print_string(warning_text);
     505                screen_style_normal();
     506        } else {
     507                free(warning_text);
     508                warning_text = NULL;
     509        }
     510        screen_newline();
     511}
     512
    486513void print_data(data_t *data)
    487514{
     
    492519        print_cpu_info(data);
    493520        print_physmem_info(data);
    494        
    495         /* Empty row for warnings */
    496         screen_get_pos(&warn_col, &warn_row);
    497         screen_newline();
     521        print_warning();
    498522       
    499523        switch (op_mode) {
     
    518542}
    519543
    520 void print_warning(const char *fmt, ...)
    521 {
    522         screen_moveto(warn_col, warn_row);
    523        
     544void show_warning(const char *fmt, ...)
     545{
     546        sysarg_t cols;
     547        sysarg_t rows;
     548        screen_get_size(&cols, &rows);
     549
     550        size_t warning_text_size = 1 + cols * sizeof(*warning_text);
     551        free(warning_text);
     552        warning_text = malloc(warning_text_size);
     553        if (!warning_text)
     554                return;
     555
    524556        va_list args;
    525557        va_start(args, fmt);
    526         vprintf(fmt, args);
     558        vsnprintf(warning_text, warning_text_size, fmt, args);
    527559        va_end(args);
    528560       
    529         screen_newline();
     561        warning_timeleft = 2 * USEC_COUNT;
     562
     563        screen_moveto(warning_col, warning_row);
     564        print_warning();
    530565        console_flush(console);
    531566}
     
    555590                kbd_event_t event;
    556591               
     592                warning_timeleft -= timeleft;
    557593                if (!console_get_kbd_event_timeout(console, &event, &timeleft)) {
    558594                        timeleft = 0;
    559595                        return -1;
    560596                }
     597                warning_timeleft += timeleft;
    561598               
    562599                if (event.type == KEY_PRESS)
Note: See TracChangeset for help on using the changeset viewer.