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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
/*@1@*/
#include "portcl.h"
/*
* Viewer of the port
*/
cl_port::cl_port(class cl_box *ipos, int iid, char *iname, class cl_app *iapp):
cl_view(ipos, iname, iapp)
{
id= iid;
sfr= 0;
pin= 0;
curs_x= curs_y= 0;
}
int
cl_port::draw(void)
{
int x, y, mask, hc, nc;
cl_view::draw();
nc= hc= get_color(C_WIN_NORMAL);
if (state & SF_SELECTED)
hc= get_color(C_WIN_SELECTED);
mvwprintw(window, 0,0, "SFR PORT PIN");
for (x= 0, mask= 0x80, y= 1; mask; mask>>= 1,y++)
{
wattrset(window, (curs_x)?nc:(curs_y==y-1?hc:nc));
mvwprintw(window, y,x, " %c", (sfr&mask)?'1':'0');
}
wattrset(window, nc);
for (x= 5, mask= 0x80, y= 1; mask; mask>>= 1,y++)
mvwprintw(window, y,x, "%c", (sfr&pin&mask)?'1':'0');
for (x=9, mask= 0x80, y= 1; mask; mask>>= 1,y++)
{
wattrset(window, curs_x?(curs_y==y-1?hc:nc):nc);
mvwprintw(window, y,x, "%c ", (pin&mask)?'1':'0');
}
wattrset(window, nc);
mvwprintw(window, 9,0, "0x%02x 0x%02x", sfr, pin);
mvwprintw(window, 10,4, "0x%02x", sfr&pin);
app->drawn++;
return(0);
}
int
cl_port::handle_event(struct t_event *event)
{
if (event->what == EV_KEY)
switch (event->event.key)
{
case KEY_HOME:
curs_y= 0; draw(); return(1);
case KEY_A1:
curs_x= curs_y= 0; draw(); return(1);
case KEY_A3:
curs_y= 0; curs_x= 1; draw(); return(1);
case KEY_C1:
curs_x= 0; curs_y= 7; draw(); return(1);
case KEY_C3:
curs_x= 1; curs_y= 7; draw(); return(1);
case KEY_LEFT: case KEY_RIGHT: case 'j': case 'k': case 'l': case 'r':
if (curs_x)
curs_x= 0;
else
curs_x= 1;
draw();
return(1);
case KEY_UP: case 'u':
curs_y--;
if (curs_y < 0)
curs_y= 7;
draw();
return(1);
case KEY_DOWN: case 'd':
curs_y++;
if (curs_y > 7)
curs_y= 0;
draw();
return(1);
case ' ': case '\n': case '\r':
if (curs_x)
toggle_pin(7-curs_y);
else
toggle_sfr(7-curs_y);
return(1);
}
return(cl_view::handle_event(event));
}
int
cl_port::toggle_sfr(int bitnr)
{
int mask= 1<<bitnr;
sfr^= mask;
draw();
return(0);
}
int
cl_port::toggle_pin(int bitnr)
{
int mask= 1<<bitnr;
pin^= mask;
draw();
return(0);
}
/*
* Window to show port viewer
******************************************************************************
*/
cl_portw::cl_portw(class cl_box *ipos, int iid, char *ititle,
class cl_app *iapp):
cl_win(ipos, ititle, iapp)
{
id= iid;
}
class cl_view *
cl_portw::mk_intern(class cl_box *ipos)
{
char n[100]= "";
sprintf(n, "port%dviewer", id);
class cl_view *v= new cl_port(ipos, id, n, app);
v->init();
return(v);
}
int
cl_portw::handle_event(struct t_event *event)
{
return(cl_win::handle_event(event));
}
/* End of gui.src/portmap.src/port.cc */
|