iPXE
Functions | Variables
ansi_screen.c File Reference
#include <stdio.h>
#include <curses.h>
#include <ipxe/ansicol.h>
#include <ipxe/console.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
 FILE_SECBOOT (PERMITTED)
 
static void ansiscr_reset (struct _curses_screen *scr) __nonnull
 
static void ansiscr_movetoyx (struct _curses_screen *scr, unsigned int y, unsigned int x) __nonnull
 
static void ansiscr_putc (struct _curses_screen *scr, chtype c) __nonnull
 
static void ansiscr_attrs (struct _curses_screen *scr, attr_t attrs)
 
static void ansiscr_init (struct _curses_screen *scr)
 
static void ansiscr_exit (struct _curses_screen *scr)
 
static void ansiscr_erase (struct _curses_screen *scr, attr_t attrs)
 
static int ansiscr_getc (struct _curses_screen *scr __unused)
 
static bool ansiscr_peek (struct _curses_screen *scr __unused)
 
static void ansiscr_cursor (struct _curses_screen *scr __unused, int visibility)
 

Variables

static unsigned int saved_usage
 
SCREEN _ansi_screen
 

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ ansiscr_reset()

static void ansiscr_reset ( struct _curses_screen scr)
static

Definition at line 29 of file ansi_screen.c.

29  {
30  /* Reset terminal attributes and clear screen */
31  scr->attrs = 0;
32  scr->curs_x = 0;
33  scr->curs_y = 0;
34  printf ( "\0330m" );
36  printf ( "\033[2J" );
37 }
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:465
void ansicol_set_pair(unsigned int cpair)
Set ANSI foreground and background colour.
Definition: ansicol.c:90
unsigned int curs_x
Current cursor position.
Definition: curses.h:36
#define CPAIR_DEFAULT
Default colour pair.
Definition: ansicol.h:38
attr_t attrs
Current attribute.
Definition: curses.h:38
unsigned int curs_y
Definition: curses.h:36

References ansicol_set_pair(), _curses_screen::attrs, CPAIR_DEFAULT, _curses_screen::curs_x, _curses_screen::curs_y, and printf().

Referenced by ansiscr_exit(), and ansiscr_init().

◆ ansiscr_movetoyx()

static void ansiscr_movetoyx ( struct _curses_screen scr,
unsigned int  y,
unsigned int  x 
)
static

Definition at line 54 of file ansi_screen.c.

55  {
56  if ( ( x != scr->curs_x ) || ( y != scr->curs_y ) ) {
57  /* ANSI escape sequence to update cursor position */
58  printf ( "\033[%d;%dH", ( y + 1 ), ( x + 1 ) );
59  scr->curs_x = x;
60  scr->curs_y = y;
61  }
62 }
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:465
static unsigned int x
Definition: pixbuf.h:63
unsigned int curs_x
Current cursor position.
Definition: curses.h:36
unsigned int curs_y
Definition: curses.h:36
static unsigned int unsigned int y
Definition: pixbuf.h:63

References _curses_screen::curs_x, _curses_screen::curs_y, printf(), x, and y.

◆ ansiscr_putc()

static void ansiscr_putc ( struct _curses_screen scr,
chtype  c 
)
static

Definition at line 64 of file ansi_screen.c.

64  {
65  unsigned int character = ( c & A_CHARTEXT );
66  attr_t attrs = ( c & ( A_ATTRIBUTES | A_COLOR ) );
67 
68  /* Update attributes if changed */
69  ansiscr_attrs ( scr, attrs );
70 
71  /* Print the actual character */
72  putchar ( character );
73 
74  /* Update expected cursor position */
75  if ( ++(scr->curs_x) == COLS ) {
76  scr->curs_x = 0;
77  ++scr->curs_y;
78  }
79 }
#define A_ATTRIBUTES
Definition: curses.h:147
uint32_t attr_t
Definition: curses.h:31
#define COLS
Definition: vga.h:27
unsigned int curs_x
Current cursor position.
Definition: curses.h:36
#define A_COLOR
Definition: curses.h:150
unsigned int curs_y
Definition: curses.h:36
#define A_CHARTEXT
Definition: curses.h:148
static void ansiscr_attrs(struct _curses_screen *scr, attr_t attrs)
Definition: ansi_screen.c:16
int putchar(int character)
Write a single character to each console device.
Definition: console.c:29

References A_ATTRIBUTES, A_CHARTEXT, A_COLOR, ansiscr_attrs(), COLS, _curses_screen::curs_x, _curses_screen::curs_y, and putchar().

◆ ansiscr_attrs()

static void ansiscr_attrs ( struct _curses_screen scr,
attr_t  attrs 
)
static

Definition at line 16 of file ansi_screen.c.

16  {
17  int bold = ( attrs & A_BOLD );
18  attr_t cpair = PAIR_NUMBER ( attrs );
19 
20  if ( scr->attrs != attrs ) {
21  scr->attrs = attrs;
22  /* Reset attributes and set/clear bold as appropriate */
23  printf ( "\033[0;%dm", ( bold ? 1 : 22 ) );
24  /* Set foreground and background colours */
25  ansicol_set_pair ( cpair );
26  }
27 }
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:465
void ansicol_set_pair(unsigned int cpair)
Set ANSI foreground and background colour.
Definition: ansicol.c:90
uint32_t attr_t
Definition: curses.h:31
attr_t attrs
Current attribute.
Definition: curses.h:38
#define A_BOLD
Definition: curses.h:139
#define PAIR_NUMBER(attrs)
Definition: curses.h:154

References A_BOLD, ansicol_set_pair(), _curses_screen::attrs, PAIR_NUMBER, and printf().

Referenced by ansiscr_erase(), and ansiscr_putc().

◆ ansiscr_init()

static void ansiscr_init ( struct _curses_screen scr)
static

Definition at line 39 of file ansi_screen.c.

39  {
41  ansiscr_reset ( scr );
42 }
#define CONSOLE_USAGE_TUI
Text-based user interface.
Definition: console.h:148
static void ansiscr_reset(struct _curses_screen *scr) __nonnull
Definition: ansi_screen.c:29
static int console_set_usage(int usage)
Set console usage.
Definition: console.h:188
static unsigned int saved_usage
Definition: ansi_screen.c:14

References ansiscr_reset(), console_set_usage(), CONSOLE_USAGE_TUI, and saved_usage.

◆ ansiscr_exit()

static void ansiscr_exit ( struct _curses_screen scr)
static

Definition at line 44 of file ansi_screen.c.

44  {
45  ansiscr_reset ( scr );
47 }
static void ansiscr_reset(struct _curses_screen *scr) __nonnull
Definition: ansi_screen.c:29
static int console_set_usage(int usage)
Set console usage.
Definition: console.h:188
static unsigned int saved_usage
Definition: ansi_screen.c:14

References ansiscr_reset(), console_set_usage(), and saved_usage.

◆ ansiscr_erase()

static void ansiscr_erase ( struct _curses_screen scr,
attr_t  attrs 
)
static

Definition at line 49 of file ansi_screen.c.

49  {
50  ansiscr_attrs ( scr, attrs );
51  printf ( "\033[2J" );
52 }
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:465
static void ansiscr_attrs(struct _curses_screen *scr, attr_t attrs)
Definition: ansi_screen.c:16

References ansiscr_attrs(), and printf().

◆ ansiscr_getc()

static int ansiscr_getc ( struct _curses_screen *scr  __unused)
static

Definition at line 81 of file ansi_screen.c.

81  {
82  return getchar();
83 }
int getchar(void)
Read a single character from any console.
Definition: console.c:86

References getchar().

◆ ansiscr_peek()

static bool ansiscr_peek ( struct _curses_screen *scr  __unused)
static

Definition at line 85 of file ansi_screen.c.

85  {
86  return iskey();
87 }
int iskey(void)
Check for available input on any console.
Definition: console.c:131

References iskey().

◆ ansiscr_cursor()

static void ansiscr_cursor ( struct _curses_screen *scr  __unused,
int  visibility 
)
static

Definition at line 89 of file ansi_screen.c.

90  {
91  printf ( "\033[?25%c", ( visibility ? 'h' : 'l' ) );
92 }
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition: vsprintf.c:465

References printf().

Variable Documentation

◆ saved_usage

unsigned int saved_usage
static

Definition at line 14 of file ansi_screen.c.

Referenced by ansiscr_exit(), ansiscr_init(), dbg_printf(), and log_vprintf().

◆ _ansi_screen

SCREEN _ansi_screen
Initial value:
= {
.init = ansiscr_init,
.exit = ansiscr_exit,
.erase = ansiscr_erase,
.movetoyx = ansiscr_movetoyx,
.putc = ansiscr_putc,
.getc = ansiscr_getc,
.peek = ansiscr_peek,
.cursor = ansiscr_cursor,
}
static void ansiscr_exit(struct _curses_screen *scr)
Definition: ansi_screen.c:44
static int ansiscr_getc(struct _curses_screen *scr __unused)
Definition: ansi_screen.c:81
static void ansiscr_cursor(struct _curses_screen *scr __unused, int visibility)
Definition: ansi_screen.c:89
static bool ansiscr_peek(struct _curses_screen *scr __unused)
Definition: ansi_screen.c:85
static void ansiscr_erase(struct _curses_screen *scr, attr_t attrs)
Definition: ansi_screen.c:49
static void ansiscr_movetoyx(struct _curses_screen *scr, unsigned int y, unsigned int x) __nonnull
Definition: ansi_screen.c:54
static void ansiscr_init(struct _curses_screen *scr)
Definition: ansi_screen.c:39
static void ansiscr_putc(struct _curses_screen *scr, chtype c) __nonnull
Definition: ansi_screen.c:64

Definition at line 94 of file ansi_screen.c.