summaryrefslogtreecommitdiffstats
path: root/status.c
blob: e6273385d028e518b183138cac5c450b278bc6a1 (plain)
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
#include "project.h"


static int computer_old_locked[N_COMPUTER + 1];
static int computer_old_active[N_COMPUTER + 1];
static int computer_old_console[N_COMPUTER + 1];


static int console_old_locked[N_CONSOLE + 1];
static int console_old_active[N_CONSOLE + 1];
static int console_old_computer[N_CONSOLE + 1];


void
status_draw_computer (int computer, int locked, int console, int active,
                      int force)
{

  int x = (computer - 1) * 45;
  int y = 5;
  x += 2;

  if (force || (computer_old_locked[computer] != locked))
    {
      if (locked != -1)
        computer_old_locked[computer] = locked;
      else
        locked = computer_old_locked[computer];
      lcd_box (x, y, x + 44, y + 44, locked ? 255 : 0, locked ? 0 : 255,
               locked ? 127 : 0);
    }

  if (force || (computer_old_console[computer] != console))
    {
      if (console != -1)
        computer_old_console[computer] = console;
      else
        console = computer_old_console[computer];
      lcd_ss (console ? console : 10, x + 17, y + 11, 11, 22);
    }

  if (force || (computer_old_active[computer] != active))
    {
      if (active != -1)
        computer_old_active[computer] = active;
      else
        active = computer_old_active[computer];
      lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0,
               active ? 255 : 0);
    }

}

void
status_draw_console (int console, int locked, int computer, int active,
                     int force)
{
  int x = (console - 1) * 106;
  int y = 100;


  if (force || (console_old_locked[console] != locked))
    {
      if (locked != -1)
        console_old_locked[console] = locked;
      else
        locked = console_old_locked[console];
      lcd_box (x, y, x + 105, y + 105, locked ? 255 : 0, locked ? 0 : 255,
               locked ? 127 : 0);
    }

  if (force || (console_old_computer[console] != computer))
    {
      if (computer != -1)
        console_old_computer[console] = computer;
      else
        computer = console_old_computer[console];
      lcd_ss (computer ? computer : 10, x + 35, y + 20, 30, 60);
    }

  if (force || (console_old_active[console] != active))
    {
      if (active != -1)
        console_old_active[console] = active;
      else
        active = console_old_active[console];
      lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0,
               active ? 255 : 0);
    }

}


void
status_init (void)
{
  int i;

  lcd_open ();
  lcd_on ();

  memset (computer_old_locked, 0xff, sizeof (computer_old_locked));
  memset (computer_old_active, 0xff, sizeof (computer_old_active));
  memset (computer_old_console, 0xff, sizeof (computer_old_console));

  for (i = 1; i <= N_COMPUTER; ++i)
    {
      status_draw_computer (i, 0, 0, 0, 0);
    }

  memset (console_old_locked, 0xff, sizeof (console_old_locked));
  memset (console_old_active, 0xff, sizeof (console_old_active));
  memset (console_old_computer, 0xff, sizeof (console_old_computer));

  for (i = 1; i <= N_CONSOLE; ++i)
    {
      status_draw_console (i, 0, 0, 0, 0);
    }

}

void
status_reset (void)
{
  int i;

  lcd_close ();
  lcd_open ();
  lcd_on ();

  for (i = 1; i <= N_COMPUTER; ++i)
    {
      status_draw_computer (i, -1, -1, -1, 0);
    }

  for (i = 1; i <= N_CONSOLE; ++i)
    {
      status_draw_console (i, -1, -1, -1, 0);
    }

}