Exemplo n.º 1
0
Arquivo: ui.c Projeto: msharov/loginx
unsigned LoginBox (acclist_t al, char* password)
{
    CursesInit();

    if (!(_loginbox = newwin (LOGIN_WINDOW_HEIGHT, LOGIN_WINDOW_WIDTH, (LINES-LOGIN_WINDOW_HEIGHT)/2, (COLS-LOGIN_WINDOW_WIDTH)/2)))
	ExitWithMessage ("failed to create login window");
    keypad (_loginbox, true);
    nodelay (_loginbox, false);
    wbkgd (_loginbox, COLOR_PAIR(1)|' ');

    int key;
    unsigned pwlen = 0;
    const unsigned aln = NAccounts();
    if (!aln)
	ExitWithMessage ("no usable accounts found");
    memset (password, 0, MAX_PW_LEN);

    // Make last logged in user default
    unsigned ali = 0;
    for (unsigned i = 0; i < aln; ++i)
	if (al[ali]->ltime <= al[i]->ltime)
	    ali = i;

    do {
	wattrset (_loginbox, COLOR_PAIR(1));
	werase (_loginbox);
	box (_loginbox, 0, 0);
	mvwaddstr (_loginbox, 1,2, USERNAME_PROMPT);
	mvwaddstr (_loginbox, 2,2, PASSWORD_PROMPT);
	wattrset (_loginbox, COLOR_PAIR(2));
	mvwaddnstr (_loginbox, 1,2+sizeof(USERNAME_PROMPT), al[ali]->name, MAX_INPUT_WIDTH);
	mvwaddnstr (_loginbox, 2,2+sizeof(PASSWORD_PROMPT), PASSWORD_MASKSTR, min(strlen(PASSWORD_MASKSTR),pwlen));
	wrefresh (_loginbox);
	key = wgetch (_loginbox);
	if (isprint(key) && pwlen < MAX_PW_LEN-1)
	    password[pwlen++] = key;
	else if (key == KEY_BACKSPACE && pwlen > 0)
	    password[--pwlen] = 0;
	else if (key == KEY_UP)
	    ali = (ali-1) % aln;
	else if (key == KEY_DOWN || key == '\t')
	    ali = (ali+1) % aln;
    } while (key != '\n');

    delwin (_loginbox);
    CursesCleanup();

    return ali;
}
Exemplo n.º 2
0
Arquivo: ui.c Projeto: msharov/loginx
static void CursesInit (void)
{
    if (!initscr())
	ExitWithMessage ("failed to initialize curses");
    atexit (CursesCleanup);
    start_color();
    use_default_colors();
    init_pair (1, COLOR_GREEN, COLOR_DEFAULT);
    init_pair (2, COLOR_CYAN, COLOR_DEFAULT);
    noecho();
}
Exemplo n.º 3
0
    bool HandleAssert(const char *pMsg, const char *pFile, int line)
    {
    	const int CBuffSize    = 120;
    	const int CBuffMaxMsg  = 80;
    	    	
    	const char *p = (pMsg == 0) ? "<none>" : pMsg;
    	if (std::strlen(p) > CBuffMaxMsg) p = "<too long>";
    	
    	char buff[CBuffSize];
    	buff[0] = 0;
    	std::sprintf(buff, "ASSERT %s @ %s:%i", p, pFile, line);
    	
    	ExitWithMessage(buff);

        // never goes here    	    	
    	return true;    	
    }