iPXE
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 )

References __nonnull, x, and y.

◆ ansiscr_reset()

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}
void ansicol_set_pair(unsigned int cpair)
Set ANSI foreground and background colour.
Definition ansicol.c:90
#define CPAIR_DEFAULT
Default colour pair.
Definition ansicol.h:38
attr_t attrs
Current attribute.
Definition curses.h:38
unsigned int curs_x
Current cursor position.
Definition curses.h:36
unsigned int curs_y
Definition curses.h:36
int printf(const char *fmt,...)
Write a formatted string to the console.
Definition vsprintf.c:465

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()

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}
static unsigned int unsigned int y
Definition pixbuf.h:63
static unsigned int x
Definition pixbuf.h:63

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

◆ ansiscr_putc()

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}
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
uint32_t attr_t
Definition curses.h:31
#define A_CHARTEXT
Definition curses.h:148
#define A_COLOR
Definition curses.h:150
#define A_ATTRIBUTES
Definition curses.h:147
#define COLS
Definition vga.h:27

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

◆ ansiscr_attrs()

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}
#define PAIR_NUMBER(attrs)
Definition curses.h:154
#define A_BOLD
Definition curses.h:139

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

Referenced by ansiscr_erase(), and ansiscr_putc().

◆ ansiscr_init()

void ansiscr_init ( struct _curses_screen * scr)
static

Definition at line 39 of file ansi_screen.c.

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

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

◆ ansiscr_exit()

void ansiscr_exit ( struct _curses_screen * scr)
static

Definition at line 44 of file ansi_screen.c.

44 {
45 ansiscr_reset ( scr );
47}

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

◆ ansiscr_erase()

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}

References ansiscr_attrs(), and printf().

◆ ansiscr_getc()

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 __unused, and getchar().

◆ ansiscr_peek()

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 __unused, and iskey().

◆ ansiscr_cursor()

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}

References __unused, and 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_movetoyx(struct _curses_screen *scr, unsigned int y, unsigned int x) __nonnull
Definition ansi_screen.c:54
static int ansiscr_getc(struct _curses_screen *scr __unused)
Definition ansi_screen.c:81
static bool ansiscr_peek(struct _curses_screen *scr __unused)
Definition ansi_screen.c:85
static void ansiscr_exit(struct _curses_screen *scr)
Definition ansi_screen.c:44
static void ansiscr_erase(struct _curses_screen *scr, attr_t attrs)
Definition ansi_screen.c:49
static void ansiscr_putc(struct _curses_screen *scr, chtype c) __nonnull
Definition ansi_screen.c:64
static void ansiscr_cursor(struct _curses_screen *scr __unused, int visibility)
Definition ansi_screen.c:89
static void ansiscr_init(struct _curses_screen *scr)
Definition ansi_screen.c:39

Definition at line 94 of file ansi_screen.c.

94 {
95 .init = ansiscr_init,
96 .exit = ansiscr_exit,
97 .erase = ansiscr_erase,
98 .movetoyx = ansiscr_movetoyx,
99 .putc = ansiscr_putc,
100 .getc = ansiscr_getc,
101 .peek = ansiscr_peek,
102 .cursor = ansiscr_cursor,
103};