Imported Upstream version 2.9.0
[debian/cc1111] / sim / ucsim / gui.src / obsolete / portmon.src / port.cc
1 /*@1@*/
2
3 #include "portcl.h"
4
5
6 /*
7  * Viewer of the port
8  */
9
10 cl_port::cl_port(class cl_box *ipos, int iid, char *iname, class cl_app *iapp):
11   cl_view(ipos, iname, iapp)
12 {
13   id= iid;
14   sfr= 0;
15   pin= 0;
16   curs_x= curs_y= 0;
17 }
18
19 int
20 cl_port::draw(void)
21 {
22   int x, y, mask, hc, nc;
23
24   cl_view::draw();
25
26   nc= hc= get_color(C_WIN_NORMAL);
27   if (state & SF_SELECTED)
28     hc= get_color(C_WIN_SELECTED);
29   mvwprintw(window, 0,0, "SFR PORT PIN");
30   for (x= 0, mask= 0x80, y= 1; mask; mask>>= 1,y++)
31     {
32       wattrset(window, (curs_x)?nc:(curs_y==y-1?hc:nc));
33       mvwprintw(window, y,x, "  %c", (sfr&mask)?'1':'0');
34     }
35   wattrset(window, nc);
36   for (x= 5, mask= 0x80, y= 1; mask; mask>>= 1,y++)
37     mvwprintw(window, y,x, "%c", (sfr&pin&mask)?'1':'0');
38   for (x=9, mask= 0x80, y= 1; mask; mask>>= 1,y++)
39     {
40       wattrset(window, curs_x?(curs_y==y-1?hc:nc):nc);
41       mvwprintw(window, y,x, "%c  ", (pin&mask)?'1':'0');
42     }
43   wattrset(window, nc);
44   mvwprintw(window, 9,0, "0x%02x    0x%02x", sfr, pin);
45   mvwprintw(window, 10,4, "0x%02x", sfr&pin);
46   app->drawn++;
47   return(0);
48 }
49
50 int
51 cl_port::handle_event(struct t_event *event)
52 {
53   if (event->what == EV_KEY)
54     switch (event->event.key)
55       {
56       case KEY_HOME:
57         curs_y= 0; draw(); return(1);
58       case KEY_A1:
59         curs_x= curs_y= 0; draw(); return(1);
60       case KEY_A3:
61         curs_y= 0; curs_x= 1; draw(); return(1);
62       case KEY_C1:
63         curs_x= 0; curs_y= 7; draw(); return(1);
64       case KEY_C3:
65         curs_x= 1; curs_y= 7; draw(); return(1);
66       case KEY_LEFT: case KEY_RIGHT: case 'j': case 'k': case 'l': case 'r':
67         if (curs_x)
68           curs_x= 0;
69         else
70           curs_x= 1;
71         draw();
72         return(1);
73       case KEY_UP: case 'u':
74         curs_y--;
75         if (curs_y < 0)
76           curs_y= 7;
77         draw();
78         return(1);
79       case KEY_DOWN: case 'd':
80         curs_y++;
81         if (curs_y > 7)
82           curs_y= 0;
83         draw();
84         return(1);
85       case ' ': case '\n': case '\r':
86         if (curs_x)
87           toggle_pin(7-curs_y);
88         else
89           toggle_sfr(7-curs_y);
90         return(1);
91       }
92   return(cl_view::handle_event(event));
93 }
94
95 int
96 cl_port::toggle_sfr(int bitnr)
97 {
98   int mask= 1<<bitnr;
99   sfr^= mask;
100   draw();
101   return(0);
102 }
103
104 int
105 cl_port::toggle_pin(int bitnr)
106 {
107   int mask= 1<<bitnr;
108   pin^= mask;
109   draw();
110   return(0);
111 }
112
113 /*
114  * Window to show port viewer
115  ******************************************************************************
116  */
117
118 cl_portw::cl_portw(class cl_box *ipos, int iid, char *ititle,
119                    class cl_app *iapp):
120   cl_win(ipos, ititle, iapp)
121 {
122   id= iid;
123 }
124
125 class cl_view *
126 cl_portw::mk_intern(class cl_box *ipos)
127 {
128   char n[100]= "";
129
130   sprintf(n, "port%dviewer", id);
131   class cl_view *v= new cl_port(ipos, id, n, app);
132   v->init();
133   return(v);
134 }
135
136 int
137 cl_portw::handle_event(struct t_event *event)
138 {
139   return(cl_win::handle_event(event));
140 }
141
142
143 /* End of gui.src/portmap.src/port.cc */