Files
lcdproc/server/serverscreens.c
T

215 lines
4.6 KiB
C
Raw Normal View History

1999-12-09 23:15:14 +00:00
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "shared/debug.h"
1999-12-09 23:15:14 +00:00
#include "drivers/lcd.h"
#include "clients.h"
#include "screen.h"
#include "screenlist.h"
#include "widget.h"
#include "serverscreens.h"
screen *server_screen;
char *id = "ClientList";
char *name = "Client List";
char title[256] = "LCDproc Server";
char one[256] = "";
char two[256] = "";
1999-12-09 23:15:14 +00:00
char three[256] = "";
#define WidgetXPos(w,a) (w)->x = (a)
#define WidgetYPos(w,a) (w)->y = (a)
#define WidgetText(w,a) (w)->text = (a)
#define WidgetString(w,a,b,t) {WidgetXPos(w,a);WidgetYPos(w,b);WidgetText(w,t);}
int
server_screen_init ()
1999-12-09 23:15:14 +00:00
{
2000-04-03 22:13:57 +00:00
widget *w;
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
debug ("server_screen_init\n");
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
server_screen = screen_create ();
2000-04-03 22:13:57 +00:00
if (!server_screen) {
fprintf (stderr, "server_screen_init: Error allocating screen\n");
return -1;
}
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
server_screen->id = id;
server_screen->name = name;
server_screen->duration = 8; // 1 second, instead of 4...
if (widget_add (server_screen, "title", "title", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
}
if (widget_add (server_screen, "one", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
}
if (widget_add (server_screen, "two", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
}
if (widget_add (server_screen, "three", "string", NULL, 1) != 0) {
fprintf (stderr, "server_screen_init: internal error: could not add title widget\n");
}
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
// Now, initialize all the widgets...
if ((w = widget_find (server_screen, "title")) != NULL) {
WidgetText(w,title);
} else
2000-04-03 22:13:57 +00:00
fprintf (stderr, "server_screen_init: Can't find title\n");
if ((w = widget_find (server_screen, "one")) != NULL)
WidgetString(w,1,2,one)
else
2000-04-03 22:13:57 +00:00
fprintf (stderr, "server_screen_init: Can't find widget one\n");
if ((w = widget_find (server_screen, "two")) != NULL)
WidgetString(w,1,3,two)
else
2000-04-03 22:13:57 +00:00
fprintf (stderr, "server_screen_init: Can't find widget two\n");
if ((w = widget_find (server_screen, "three")) != NULL)
WidgetString(w,1,4,three)
else
2000-04-03 22:13:57 +00:00
fprintf (stderr, "server_screen_init: Can't find widget three\n");
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
// And enqueue the screen
screenlist_add (server_screen);
2000-04-03 22:13:57 +00:00
debug ("server_screen_init done\n");
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}
static int
screen_count (client *c) {
int n;
n = 0;
LL_Rewind (c->data->screenlist);
do {
if (LL_Get (c->data->screenlist) != NULL)
n++;
} while (LL_Next (c->data->screenlist) == 0);
return n;
}
int
update_server_screen (int timer)
1999-12-09 23:15:14 +00:00
{
2000-04-03 22:13:57 +00:00
client *c;
int num_clients;
screen *s;
int num_screens;
2000-04-03 22:13:57 +00:00
// Draw a title...
//strcpy(title, "LCDproc Server");
1999-12-09 23:15:14 +00:00
2000-04-03 22:13:57 +00:00
// Now get info on the number of connected clients...
num_clients = 0;
num_screens = 0;
LL_Rewind (clients);
do {
c = LL_Get (clients);
if (c) {
num_clients++;
num_screens += screen_count(c);
// LL_Rewind (c->data->screenlist);
// do {
// s = LL_Get (c->data->screenlist);
// if (s) {
// num_screens++;
// }
// } while (LL_Next (c->data->screenlist) == 0);
2000-04-03 22:13:57 +00:00
}
} while (LL_Next (clients) == 0);
1999-12-09 23:15:14 +00:00
// Format strings for the appropriate size display...
//
2000-04-03 22:13:57 +00:00
if (lcd.hgt >= 3) {
snprintf (one, sizeof(one), "Clients: %i", num_clients);
snprintf (two, sizeof(two), "Screens: %i", num_screens);
2000-04-03 22:13:57 +00:00
} else {
if (lcd.wid >= 20)
snprintf (one, sizeof(one), "%i Client%s, %i Screen%s", num_clients,
(num_clients == 1) ? "" : "s", num_screens,
(num_screens == 1) ? "" : "s");
2000-04-03 22:13:57 +00:00
else // 16x2 size
snprintf (one, sizeof(one), "%i Cli%s, %i Scr%s", num_clients,
(num_clients == 1) ? "" : "s", num_screens,
(num_screens == 1) ? "" : "s");
2000-04-03 22:13:57 +00:00
}
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}
int
no_screen_screen (int timer)
1999-12-09 23:15:14 +00:00
{
2000-04-03 22:13:57 +00:00
lcd.clear ();
lcd.string (1, 1, "Error: No screen!");
lcd.flush ();
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}
int
goodbye_screen ()
1999-12-09 23:15:14 +00:00
{
char *b20 = " ";
char *t20 = " Thanks for using ";
1999-12-09 23:15:14 +00:00
#ifdef LINUX
char *l20 = " LCDproc and Linux! ";
1999-12-09 23:15:14 +00:00
#else
char *l20 = " LCDproc! ";
1999-12-09 23:15:14 +00:00
#endif
char *b16 = " ";
char *t16 = "Thanks for using";
1999-12-09 23:15:14 +00:00
#ifdef LINUX
char *l16 = " LCDproc+Linux! ";
1999-12-09 23:15:14 +00:00
#else
char *l16 = " LCDproc! ";
1999-12-09 23:15:14 +00:00
#endif
2000-04-03 22:13:57 +00:00
lcd.clear ();
2000-04-03 22:13:57 +00:00
if (lcd.hgt >= 4) {
if (lcd.wid >= 20) {
lcd.string (1, 1, b20);
lcd.string (1, 2, t20);
lcd.string (1, 3, l20);
lcd.string (1, 4, b20);
} else {
lcd.string (1, 1, b16);
lcd.string (1, 2, t16);
lcd.string (1, 3, l16);
lcd.string (1, 4, b16);
}
} else {
if (lcd.wid >= 20) {
lcd.string (1, 1, t20);
lcd.string (1, 2, l20);
} else {
lcd.string (1, 1, t16);
lcd.string (1, 2, l16);
}
}
2000-04-03 22:13:57 +00:00
lcd.flush ();
2000-04-03 22:13:57 +00:00
return 0;
1999-12-09 23:15:14 +00:00
}