about summary refs log tree commit diff stats
path: root/apps/ex6
Commit message (Expand)AuthorAgeFilesLines
* 7225Kartik Agaram2020-11-111-0/+0
* 6622 - new syscalls: time and ntimeKartik Agaram2020-07-081-0/+0
* 6604 - new appKartik Agaram2020-07-011-0/+0
* 6409 - primitives for text-mode UIsKartik Agaram2020-05-271-0/+0
* 5856Kartik Agaram2020-01-011-0/+0
ani-tty/commit/input_win.c?id=c8bf654e2cd234bfd35ca97d6994b078b1b9b5ba'>c8bf654e ^
0e30c795 ^
c8bf654e ^







03b90cf5 ^




c8bf654e ^














































0e30c795 ^

c8bf654e ^
9e63c4a0 ^
c8bf654e ^

4a2ff760 ^



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96











                                         
                         




                                   
                         





                          
                         







                         




                          














































                                                         

                                     
           
                       

 



                       
#include <ncurses.h>
#include "windows.h"

static WINDOW *inp_win;

void create_input_window(void)
{
    int rows, cols;
    getmaxyx(stdscr, rows, cols);

    inp_win = newwin(1, cols, rows-1, 0);
    keypad(inp_win, TRUE);
    wmove(inp_win, 0, 1);
    wrefresh(inp_win);
}

void inp_get_command_str(char *cmd)
{
    wmove(inp_win, 0, 1);
    wgetstr(inp_win, cmd);
}

void inp_clear(void)
{
    wclear(inp_win);
    wmove(inp_win, 0, 1);
    wrefresh(inp_win);
}

void inp_non_block(void)
{
    wtimeout(inp_win, 0);
}

void inp_block(void)
{
    wtimeout(inp_win, -1);
}

void inp_poll_char(int *ch, char command[], int *size)
{
    int inp_y = 0;
    int inp_x = 0;

    // move cursor back to inp_win
    getyx(inp_win, inp_y, inp_x);
    wmove(inp_win, inp_y, inp_x);

    // echo off, and get some more input
    noecho();
    *ch = wgetch(inp_win);

    // if delete pressed, go back and delete it
    if (*ch == 127) {
        if (*size > 0) {
            getyx(inp_win, inp_y, inp_x);
            wmove(inp_win, inp_y, inp_x-1);
            wdelch(inp_win);
            (*size)--;
        }
    }

    // else if not error or newline, show it and store it
    else if (*ch != ERR &&
             *ch != '\n' &&
             *ch != KEY_F(1) &&
             *ch != KEY_F(2) &&
             *ch != KEY_F(3) &&
             *ch != KEY_F(4) &&
             *ch != KEY_F(5) &&
             *ch != KEY_F(6) &&
             *ch != KEY_F(7) &&
             *ch != KEY_F(8) &&
             *ch != KEY_F(9) &&
             *ch != KEY_F(10)) {
        waddch(inp_win, *ch);
        command[(*size)++] = *ch;
    }

    echo();
}

void inp_get_password(char *passwd)
{
    wclear(inp_win);
    noecho();
    mvwgetstr(inp_win, 0, 1, passwd);
    wmove(inp_win, 0, 1);
    echo();
    status_bar_clear();
}

void inp_put_back(void)
{
    wrefresh(inp_win);
}