Annotation of qemu/roms/ipxe/src/hci/mucurses/ansi_screen.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <curses.h>
                      3: #include <ipxe/console.h>
                      4: 
                      5: FILE_LICENCE ( GPL2_OR_LATER );
                      6: 
                      7: static void ansiscr_reset(struct _curses_screen *scr) __nonnull;
                      8: static void ansiscr_movetoyx(struct _curses_screen *scr,
                      9:                                unsigned int y, unsigned int x) __nonnull;
                     10: static void ansiscr_putc(struct _curses_screen *scr, chtype c) __nonnull;
                     11: 
                     12: unsigned short _COLS = 80;
                     13: unsigned short _LINES = 24;
                     14: 
                     15: static void ansiscr_reset ( struct _curses_screen *scr ) {
                     16:        /* Reset terminal attributes and clear screen */
                     17:        scr->attrs = 0;
                     18:        scr->curs_x = 0;
                     19:        scr->curs_y = 0;
                     20:        printf ( "\033[0m" );
                     21: }
                     22: 
                     23: static void ansiscr_movetoyx ( struct _curses_screen *scr,
                     24:                               unsigned int y, unsigned int x ) {
                     25:        if ( ( x != scr->curs_x ) || ( y != scr->curs_y ) ) {
                     26:                /* ANSI escape sequence to update cursor position */
                     27:                printf ( "\033[%d;%dH", ( y + 1 ), ( x + 1 ) );
                     28:                scr->curs_x = x;
                     29:                scr->curs_y = y;
                     30:        }
                     31: }
                     32: 
                     33: static void ansiscr_putc ( struct _curses_screen *scr, chtype c ) {
                     34:        unsigned int character = ( c & A_CHARTEXT );
                     35:        attr_t attrs = ( c & ( A_ATTRIBUTES | A_COLOR ) );
                     36:        int bold = ( attrs & A_BOLD );
                     37:        attr_t cpair = PAIR_NUMBER ( attrs );
                     38:        short fcol;
                     39:        short bcol;
                     40: 
                     41:        /* Update attributes if changed */
                     42:        if ( attrs != scr->attrs ) {
                     43:                scr->attrs = attrs;
                     44:                pair_content ( cpair, &fcol, &bcol );
                     45:                /* ANSI escape sequence to update character attributes */
                     46:                printf ( "\033[0;%d;3%d;4%dm", ( bold ? 1 : 22 ), fcol, bcol );
                     47:        }
                     48: 
                     49:        /* Print the actual character */
                     50:        putchar ( character );
                     51: 
                     52:        /* Update expected cursor position */
                     53:        if ( ++(scr->curs_x) == _COLS ) {
                     54:                scr->curs_x = 0;
                     55:                ++scr->curs_y;
                     56:        }
                     57: }
                     58: 
                     59: static int ansiscr_getc ( struct _curses_screen *scr __unused ) {
                     60:        return getchar();
                     61: }
                     62: 
                     63: static bool ansiscr_peek ( struct _curses_screen *scr __unused ) {
                     64:        return iskey();
                     65: }
                     66: 
                     67: SCREEN _ansi_screen = {
                     68:        .init           = ansiscr_reset,
                     69:        .exit           = ansiscr_reset,
                     70:        .movetoyx       = ansiscr_movetoyx,
                     71:        .putc           = ansiscr_putc,
                     72:        .getc           = ansiscr_getc,
                     73:        .peek           = ansiscr_peek,
                     74: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.