root/tools/perf/ui/tui/helpline.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. tui_helpline__pop
  2. tui_helpline__push
  3. tui_helpline__show
  4. ui_helpline__init

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <stdio.h>
   3 #include <stdlib.h>
   4 #include <string.h>
   5 #include <pthread.h>
   6 #include <linux/kernel.h>
   7 #include <linux/string.h>
   8 
   9 #include "../helpline.h"
  10 #include "../ui.h"
  11 #include "../libslang.h"
  12 
  13 char ui_helpline__last_msg[1024];
  14 bool tui_helpline__set;
  15 
  16 static void tui_helpline__pop(void)
  17 {
  18 }
  19 
  20 static void tui_helpline__push(const char *msg)
  21 {
  22         const size_t sz = sizeof(ui_helpline__current);
  23 
  24         SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);
  25         SLsmg_set_color(0);
  26         SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols);
  27         SLsmg_refresh();
  28         strlcpy(ui_helpline__current, msg, sz);
  29 }
  30 
  31 static int tui_helpline__show(const char *format, va_list ap)
  32 {
  33         int ret;
  34         static int backlog;
  35 
  36         pthread_mutex_lock(&ui__lock);
  37         ret = vscnprintf(ui_helpline__last_msg + backlog,
  38                         sizeof(ui_helpline__last_msg) - backlog, format, ap);
  39         backlog += ret;
  40 
  41         tui_helpline__set = true;
  42 
  43         if (ui_helpline__last_msg[backlog - 1] == '\n') {
  44                 ui_helpline__puts(ui_helpline__last_msg);
  45                 SLsmg_refresh();
  46                 backlog = 0;
  47         }
  48         pthread_mutex_unlock(&ui__lock);
  49 
  50         return ret;
  51 }
  52 
  53 struct ui_helpline tui_helpline_fns = {
  54         .pop    = tui_helpline__pop,
  55         .push   = tui_helpline__push,
  56         .show   = tui_helpline__show,
  57 };
  58 
  59 void ui_helpline__init(void)
  60 {
  61         helpline_fns = &tui_helpline_fns;
  62         ui_helpline__puts(" ");
  63 }

/* [<][>][^][v][top][bottom][index][help] */