Annotation of qemu/roms/ipxe/src/hci/tui/login_ui.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (C) 2009 Michael Brown <[email protected]>.
                      3:  *
                      4:  * This program is free software; you can redistribute it and/or
                      5:  * modify it under the terms of the GNU General Public License as
                      6:  * published by the Free Software Foundation; either version 2 of the
                      7:  * License, or any later version.
                      8:  *
                      9:  * This program is distributed in the hope that it will be useful, but
                     10:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     12:  * General Public License for more details.
                     13:  *
                     14:  * You should have received a copy of the GNU General Public License
                     15:  * along with this program; if not, write to the Free Software
                     16:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     17:  */
                     18: 
                     19: FILE_LICENCE ( GPL2_OR_LATER );
                     20: 
                     21: /** @file
                     22:  *
                     23:  * Login UI
                     24:  *
                     25:  */
                     26: 
                     27: #include <string.h>
                     28: #include <errno.h>
                     29: #include <curses.h>
                     30: #include <ipxe/console.h>
                     31: #include <ipxe/settings.h>
                     32: #include <ipxe/editbox.h>
                     33: #include <ipxe/keys.h>
                     34: #include <ipxe/login_ui.h>
                     35: 
                     36: /* Colour pairs */
                     37: #define CPAIR_NORMAL           1
                     38: #define CPAIR_LABEL            2
                     39: #define CPAIR_EDITBOX          3
                     40: 
                     41: /* Screen layout */
                     42: #define USERNAME_LABEL_ROW     8
                     43: #define USERNAME_ROW           10
                     44: #define PASSWORD_LABEL_ROW     14
                     45: #define PASSWORD_ROW           16
                     46: #define LABEL_COL              36
                     47: #define EDITBOX_COL            30
                     48: #define EDITBOX_WIDTH          20
                     49: 
                     50: int login_ui ( void ) {
                     51:        char username[64];
                     52:        char password[64];
                     53:        struct edit_box username_box;
                     54:        struct edit_box password_box;
                     55:        struct edit_box *current_box = &username_box;
                     56:        int key;
                     57:        int rc = -EINPROGRESS;
                     58: 
                     59:        /* Fetch current setting values */
                     60:        fetch_string_setting ( NULL, &username_setting, username,
                     61:                               sizeof ( username ) );
                     62:        fetch_string_setting ( NULL, &password_setting, password,
                     63:                               sizeof ( password ) );
                     64: 
                     65:        /* Initialise UI */
                     66:        initscr();
                     67:        start_color();
                     68:        init_pair ( CPAIR_NORMAL, COLOR_WHITE, COLOR_BLACK );
                     69:        init_pair ( CPAIR_LABEL, COLOR_WHITE, COLOR_BLACK );
                     70:        init_pair ( CPAIR_EDITBOX, COLOR_WHITE, COLOR_BLUE );
                     71:        init_editbox ( &username_box, username, sizeof ( username ), NULL,
                     72:                       USERNAME_ROW, EDITBOX_COL, EDITBOX_WIDTH, 0 );
                     73:        init_editbox ( &password_box, password, sizeof ( password ), NULL,
                     74:                       PASSWORD_ROW, EDITBOX_COL, EDITBOX_WIDTH,
                     75:                       EDITBOX_STARS );
                     76: 
                     77:        /* Draw initial UI */
                     78:        erase();
                     79:        color_set ( CPAIR_LABEL, NULL );
                     80:        mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" );
                     81:        mvprintw ( PASSWORD_LABEL_ROW, LABEL_COL, "Password:" );
                     82:        color_set ( CPAIR_EDITBOX, NULL );
                     83:        draw_editbox ( &username_box );
                     84:        draw_editbox ( &password_box );
                     85: 
                     86:        /* Main loop */
                     87:        while ( rc == -EINPROGRESS ) {
                     88: 
                     89:                draw_editbox ( current_box );
                     90: 
                     91:                key = getkey ( 0 );
                     92:                switch ( key ) {
                     93:                case KEY_DOWN:
                     94:                        current_box = &password_box;
                     95:                        break;
                     96:                case KEY_UP:
                     97:                        current_box = &username_box;
                     98:                        break;
                     99:                case TAB:
                    100:                        current_box = ( ( current_box == &username_box ) ?
                    101:                                        &password_box : &username_box );
                    102:                        break;
                    103:                case KEY_ENTER:
                    104:                        if ( current_box == &username_box ) {
                    105:                                current_box = &password_box;
                    106:                        } else {
                    107:                                rc = 0;
                    108:                        }
                    109:                        break;
                    110:                case CTRL_C:
                    111:                case ESC:
                    112:                        rc = -ECANCELED;
                    113:                        break;
                    114:                default:
                    115:                        edit_editbox ( current_box, key );
                    116:                        break;
                    117:                }
                    118:        }
                    119: 
                    120:        /* Terminate UI */
                    121:        color_set ( CPAIR_NORMAL, NULL );
                    122:        erase();
                    123:        endwin();
                    124: 
                    125:        if ( rc != 0 )
                    126:                return rc;
                    127: 
                    128:        /* Store settings */
                    129:        if ( ( rc = store_setting ( NULL, &username_setting, username,
                    130:                                    strlen ( username ) ) ) != 0 )
                    131:                return rc;
                    132:        if ( ( rc = store_setting ( NULL, &password_setting, password,
                    133:                                    strlen ( password ) ) ) != 0 )
                    134:                return rc;
                    135: 
                    136:        return 0;
                    137: }

unix.superglobalmegacorp.com

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