wmifs: Remove libc5 version.

libc6 was released in 1997...
This commit is contained in:
Doug Torrance 2014-10-22 16:34:42 -05:00 committed by Carlos R. Mafra
parent a62dcaebc7
commit 6083e3f774
2 changed files with 1 additions and 939 deletions

View file

@ -21,7 +21,7 @@ Requirements
Installation
--------------------------------------------------------------
1) % tar -zxvf wmifs-1.3b.tar.gz
2)* % cd wmifs.app/wmifs
2) % cd wmifs.app/wmifs
3) % make
4) % su root
5) # make install
@ -30,10 +30,6 @@ Installation
start, stop & restart scripts
7) % wmifs & (or wmifs -h for brief help).
2)* If you're on a libc5 system, copy or move wmifs-libc5.c
over wmifs.c (i.e. cp wmifs-libc5.c wmifs.c) and proceed
with step 3)
6)* This is optional, WMiFS also works fine without them,
it's entirely up to you ;-)

View file

@ -1,934 +0,0 @@
/*
Best viewed with vim5, using ts=4
This code was mainly put together by looking at the
following programs:
asclock
A neat piece of equip, used to display the date
and time on the screen.
Comes with every AfterStep installation.
Source used:
How do I create a not so solid window?
How do I open a window?
How do I use pixmaps?
pppstats
A program that prints the amount of data that
is transferred over a ppp-line.
Source used:
How do I read the ppp device?
------------------------------------------------------------
Author: Martijn Pieterse (pieterse@xs4all.nl)
This program was hacked together between the 7th of March
and the 14th of March 1998.
This program might be Y2K resistant. We shall see. :)
This program is distributed under the GPL license.
(as were asclock and pppstats)
Known Features: (or in non M$ talk, BUGS)
* only ppp0 will be read
use wmifs if you want to read more than one ppp connection
not sure about this.
* the leds won't be reliable with
more than 1 ppp connection
* there is an iconwin, and win variable.
I have no clue why only win shouldn't
be enough. Will check it out later.
* The afterstep what seems the shift the
pixmap a bit. Don't know how and why.
It works in the WindowManager.
Things to do:
Split up main()
----
Thanks
----
Most of the ideas, and jumpstarting it:
#linuxnl, without this irc-channel wmppp would've never seen the light!
CCC (Constructive Code Criticism):
Marcelo E. Magallon
Thanks a LOT! It takes a while to get me convinced... :)
Minor bugs and ideas:
Marc De Scheemaecker / David Mihm / Chris Soghoian /
Alessandro Usseglio Viretta / Dan Pascu
and ofcourse numerous ppl who send us bug reports.
(numerous? hmm.. todo: rephrase this :) )
----
Changes:
---
12/05/1998 (Antoine Nulle), warp@xs4all.nl)
* Made wmifs.c libc5 compatible version
04/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Changed the "middle of the waveform" line color
* Moved the RedrawWindow out of the main loop.
Lightens the system load
02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Torn wmppp and wmifs apart.
This is gonna be wmifs
* Added parse_rcfile
* Added waitpid, to get rid of the zombies, spotteb by Alessandro Usseglio Viretta
30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Used the DrawStats routine from wmifs in wmppp
* I decided to add a list in this source file
with name of ppl who helped me build this code better.
* I finally removed the /proc/net/route dependancy
All of the connections are taken from /proc/net/dev.
/proc/net/route is still used for checking if it is on-line.
27/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* WMIFS: stats scrolled, while red led burning
* WMPPP: changed positions of line speed
25/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Changed the checknetdevs routine, a lot!
23/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added line speed detection. via seperate exec. (this has to be suid root!)
Speed has to be no more than 99999
* Added speed and forcespeed in ~/.wmppprc and /etc/wmppprc
* wmifs: added on-line detection scheme, update the bitmap coordinates
* wmppp: the x-button now allways disconnects.
22/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added /etc/wmppprc support, including "forced" mode.
* Added /etc/wmifsrc support, including "forced" mode.
21/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Moved the stats one pixel down.
* Added status led in wmifs.
* Changed RX/TX leds of wmifs to resemble wmppp
* Added the "dot" between eth.0 ppp.0 etc.
* Changed to wmifs stats to match wmppp stats (only pppX changed)
* Made sure that when specified -t 1, it stayed that way, even
when longer than 100 minutes online
* With -t 1, jump from 59:59 to 01:00 instead of 99:59 to 01:40
16/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added "all" devices in wmifs
* Added "lo" support only if aked via -i
* Added on-line time detection (using /var/run/ppp0.pid)
* Added time-out for the orange led. (one minute)
15/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Another wmppp-master.xpm.
Line speed detection being the main problem here.. :(
* Moved START_COMMAND / STOP_COMMAND to ~/.wmppprc
Return 0, everything went ok.
Return 10, the command did not work.
Please note, these functions are ran in the background.
* Removed the ability to configure
* When "v" is clicked, an orange led will appear.
if the connect script fails (return value == 10)
it will become dark again. Else the on-line detection will
pick it up, and "green" it.
14/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added "-timer"
* Added "-display" support
* Changed pixmap to a no-name pixmap.
+ Changed LED positions
+ Changed Timer position
+ Changed Stats Size
05/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added ~/.wmifsrc support.
* Put some code in DrawStats
* Check devices when pressing "device change"
03/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added code for wmifs
28/03/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* forgot what i did.. :)
27/03/1998 (Martijn Pieterse, pieterse@xs4all.nl)
* Added on-line detection
Scan through /proc/net/route and check everye line
for "ppp".
* A bit of code clean-up.
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <X11/Xlib.h>
#include <X11/xpm.h>
#include <X11/extensions/shape.h>
#include <net/ppp_defs.h>
#include <net/if_ppp.h>
#include "../wmgeneral/wmgeneral.h"
#include "../wmgeneral/misc.h"
#include "wmifs-master.xpm"
#include "wmifs-mask.xbm"
/***********/
/* Defines */
/***********/
/* Fill in the hardcoded actions */
#define LEFT_ACTION (NULL)
#define MIDDLE_ACTION (NULL)
#define RIGHT_ACTION (NULL)
/* Defines voor alle coordinate */
#define LED_NET_RX (4)
#define LED_NET_TX (5)
#define LED_NET_POWER (6)
#define WMIFS_VERSION "1.2.1"
/**********************/
/* External Variables */
/**********************/
extern char **environ;
/********************/
/* Global Variables */
/********************/
char *ProgName;
char *active_interface = NULL;
int TimerDivisor=60;
int WaveForm=0;
/*****************/
/* PPP variables */
/*****************/
#define PPP_UNIT 0
int ppp_h = -1;
#define PPP_STATS_HIS 54
/***********************/
/* Function Prototypes */
/***********************/
void usage(void);
void printversion(void);
void DrawTime(int, int);
void DrawStats(int *, int, int, int, int);
void SetOnLED(int);
void SetErrLED(int);
void SetWaitLED(int);
void SetOffLED(int);
void ButtonUp(int);
void ButtonDown(int);
void wmifs_routine(int, char **);
void get_ppp_stats(struct ppp_stats *cur);
/********/
/* Main */
/********/
void main(int argc, char *argv[]) {
int i;
/* Parse Command Line */
ProgName = argv[0];
if (strlen(ProgName) >= 5)
ProgName += (strlen(ProgName) - 5);
for (i=1; i<argc; i++) {
char *arg = argv[i];
if (*arg=='-') {
switch (arg[1]) {
case 'd' :
if (strcmp(arg+1, "display")) {
usage();
exit(1);
}
break;
case 'i' :
active_interface = argv[i+1];
i++;
break;
case 'v' :
printversion();
exit(0);
break;
case 'w' :
WaveForm = 1;
break;
default:
usage();
exit(0);
break;
}
}
}
wmifs_routine(argc, argv);
}
/*******************************************************************************\
|* wmifs_routine *|
\*******************************************************************************/
#define MAX_STAT_DEVICES 4
typedef struct {
char name[8];
int his[55][2];
long istatlast;
long ostatlast;
} stat_dev;
stat_dev stat_devices[MAX_STAT_DEVICES];
char *left_action = NULL;
char *right_action = NULL;
char *middle_action = NULL;
int checknetdevs(void);
int get_statistics(char *, long *, long *, long *, long *);
int stillonline(char *);
void DrawActiveIFS(char *);
void wmifs_routine(int argc, char **argv) {
rckeys wmifs_keys[] = {
{ "left", &left_action },
{ "middle", &middle_action },
{ "right", &right_action },
{ NULL, NULL }
};
int i,j;
XEvent Event;
int but_stat = -1;
int stat_online;
int stat_current;
long starttime;
long curtime;
long nexttime;
long ipacket, opacket, istat, ostat;
char temp[128];
char *p;
for (i=0; i<MAX_STAT_DEVICES; i++) {
stat_devices[i].name[0] = 0;
for (j=0; j<48; j++) {
stat_devices[i].his[j][0] = 0;
stat_devices[i].his[j][1] = 0;
}
}
stat_online = checknetdevs();
stat_current = 0;
if (active_interface) {
for (i=0; i<stat_online; i++) {
if (!strcmp(stat_devices[i].name, active_interface))
stat_current = i;
}
}
if (LEFT_ACTION) left_action = strdup(LEFT_ACTION);
if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION);
if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION);
/* Scan throught the .rc files */
strcpy(temp, "/etc/wmifsrc");
parse_rcfile(temp, wmifs_keys);
p = getenv("HOME");
strcpy(temp, p);
strcat(temp, "/.wmifsrc");
parse_rcfile(temp, wmifs_keys);
strcpy(temp, "/etc/wmifsrc.fixed");
parse_rcfile(temp, wmifs_keys);
openXwindow(argc, argv, wmifs_master_xpm, wmifs_mask_bits, wmifs_mask_width, wmifs_mask_height);
/* > Button */
AddMouseRegion(0, 5, 5, 35, 15);
AddMouseRegion(1, 5, 20, 58, 58);
starttime = time(0);
nexttime = starttime + 5;
for (i=0; i<stat_online; i++) {
get_statistics(stat_devices[i].name, &ipacket, &opacket, &istat, &ostat);
stat_devices[i].istatlast = istat;
stat_devices[i].ostatlast = ostat;
}
DrawActiveIFS(stat_devices[stat_current].name);
while (1) {
curtime = time(0);
waitpid(0, NULL, WNOHANG);
for (i=0; i<stat_online; i++) {
get_statistics(stat_devices[i].name, &ipacket, &opacket, &istat, &ostat);
stat_devices[i].his[53][0] += istat - stat_devices[i].istatlast;
stat_devices[i].his[53][1] += ostat - stat_devices[i].ostatlast;
if (i == stat_current) {
if (!stillonline(stat_devices[i].name)) {
SetErrLED(LED_NET_POWER);
} else {
SetOnLED(LED_NET_POWER);
}
if (stat_devices[i].istatlast == istat)
SetOffLED(LED_NET_RX);
else
SetOnLED(LED_NET_RX);
if (stat_devices[i].ostatlast == ostat)
SetOffLED(LED_NET_TX);
else
SetOnLED(LED_NET_TX);
}
stat_devices[i].istatlast = istat;
stat_devices[i].ostatlast = ostat;
RedrawWindow();
}
if (curtime >= nexttime) {
nexttime+=5;
for (i=0; i<stat_online; i++) {
if (i == stat_current) {
DrawStats(&stat_devices[i].his[0][0], 54, 40, 5, 58);
}
if (stillonline(stat_devices[i].name)) {
for (j=1; j<54; j++) {
stat_devices[i].his[j-1][0] = stat_devices[i].his[j][0];
stat_devices[i].his[j-1][1] = stat_devices[i].his[j][1];
}
stat_devices[i].his[53][0] = 0;
stat_devices[i].his[53][1] = 0;
}
}
RedrawWindow();
}
while (XPending(display)) {
XNextEvent(display, &Event);
switch (Event.type) {
case Expose:
RedrawWindow();
break;
case DestroyNotify:
XCloseDisplay(display);
exit(0);
break;
case ButtonPress:
i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
but_stat = i;
break;
case ButtonRelease:
i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
if (but_stat == i && but_stat >= 0) {
switch (but_stat) {
case 0 :
/* re-read the table */
strcpy(temp, stat_devices[stat_current].name);
stat_online = checknetdevs();
stat_current = 0;
for (i=0; i<stat_online; i++) {
if (!strncmp(temp, stat_devices[i].name, 4)) {
stat_current = i;
}
}
stat_current++;
if (stat_current == stat_online) stat_current = 0;
DrawActiveIFS(stat_devices[stat_current].name);
DrawStats(&stat_devices[stat_current].his[0][0], 54, 40, 5, 58);
break;
case 1:
switch (Event.xbutton.button) {
case 1:
if (left_action)
execCommand(left_action);
break;
case 2:
if (middle_action)
execCommand(middle_action);
break;
case 3:
if (right_action)
execCommand(right_action);
break;
}
break;
}
}
but_stat = -1;
RedrawWindow();
break;
}
}
usleep(50000L);
}
}
/*******************************************************************************\
|* void DrawActiveIFS(char *) *|
\*******************************************************************************/
void DrawActiveIFS(char *name) {
/* Cijfers op: 0,65
Letters op: 0,75
Alles 9 hoog, 6 breedt
Destinatie: 5,5
*/
int i;
int c;
int k;
copyXPMArea(5, 84, 30, 10, 5, 5);
k = 5;
for (i=0; name[i]; i++) {
if (i == strlen(name)-1 && strlen(name) <= 4 && name[strlen(name)-1] >= '0' && name[strlen(name)-1] <= '9') {
copyXPMArea(61, 64, 4, 9, k, 5);
k+=4;
}
c = toupper(name[i]);
if (c >= 'A' && c <= 'Z') {
c -= 'A';
copyXPMArea(c * 6, 74, 6, 9, k, 5);
k += 6;
} else {
c -= '0';
copyXPMArea(c * 6, 64, 6, 9, k, 5);
k += 6;
}
}
}
/*******************************************************************************\
|* get_statistics *|
\*******************************************************************************/
int get_statistics(char *devname, long *ip, long *op, long *is, long *os) {
FILE *fp;
char temp[128];
char *p;
char *tokens = " |:\n";
int input, output;
int i;
int found;
struct ppp_stats ppp_cur, ppp_old;
static int ppp_opened = 0;
if (!strncmp(devname, "ppp", 3)) {
if (!ppp_opened) {
/* Open the ppp device. */
memset(&ppp_cur, 0, sizeof(ppp_cur));
if ((ppp_h = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
return -1;
get_ppp_stats(&ppp_cur);
ppp_old = ppp_cur;
ppp_opened = 1;
}
get_ppp_stats(&ppp_cur);
*op = ppp_cur.p.ppp_opackets;
*ip = ppp_cur.p.ppp_ipackets;
*is = ppp_cur.p.ppp_ibytes;
*os = ppp_cur.p.ppp_obytes;
return 0;
}
/* Read from /proc/net/dev the stats! */
fp = fopen("/proc/net/dev", "r");
fgets(temp, 128, fp);
fgets(temp, 128, fp);
input = -1;
output = -1;
i = 0;
found = -1;
p = strtok(temp, tokens);
do {
if (!(strcmp(p, "packets"))) {
if (input == -1) input = i;
else output = i;
}
i++;
p = strtok(NULL, tokens);
} while (input == -1 || output == -1);
while (fgets(temp, 128, fp)) {
if (strstr(temp, devname)) {
found = 0;
p = strtok(temp, tokens);
i = 0;
do {
if (i == input) {
*ip = *is = atoi(p);
input = -1;
}
if (i == output) {
*op = *os = atoi(p);
output = -1;
}
i++;
p = strtok(NULL, tokens);
} while (input != -1 || output != -1);
}
}
fclose(fp);
return found;
}
/*******************************************************************************\
|* stillonline *|
\*******************************************************************************/
int stillonline(char *ifs) {
FILE *fp;
char temp[128];
int i;
i = 0;
fp = fopen("/proc/net/route", "r");
if (fp) {
while (fgets(temp, 128, fp)) {
if (strstr(temp, ifs)) {
i = 1; /* Line is alive */
}
}
fclose(fp);
}
return i;
}
/*******************************************************************************\
|* checknetdevs *|
\*******************************************************************************/
int checknetdevs(void) {
FILE *fd;
char temp[128];
char *p;
int i=0,j;
int k;
int devsfound=0;
char *tokens = " :\t\n";
char foundbuffer[MAX_STAT_DEVICES][8];
for (i=0; i<MAX_STAT_DEVICES; i++) {
foundbuffer[i][0] = 0;
}
/* foundbuffer vullen met info uit /proc/net/dev */
fd = fopen("/proc/net/dev", "r");
if (fd) {
/* Skip the first 2 lines */
fgets(temp, 128, fd);
fgets(temp, 128, fd);
while (fgets(temp, 128, fd)) {
p = strtok(temp, tokens);
/* Skip dummy code */
if (!strncmp(p, "dummy", 5))
continue;
/* If p == "lo", and active_interface (as given on the cmd line) != "lo",
skip it! */
if (strcmp(p, "lo") || (active_interface && !strcmp(active_interface, "lo"))) {
strcpy(foundbuffer[devsfound], p);
devsfound++;
}
}
fclose(fd);
}
/* Nu foundbuffer naar stat_devices[].name kopieeren */
for (i=0; i<MAX_STAT_DEVICES; i++) {
/* Loop stat_devices na, als die naam niet voorkomt in foundbuffer, kill! */
if (stat_devices[i].name[0]) {
k = 0;
for (j=0; j<MAX_STAT_DEVICES; j++) {
if (!strcmp(stat_devices[i].name, foundbuffer[j])) {
k = 1;
foundbuffer[j][0] = 0;
}
}
if (!k) stat_devices[i].name[0] = 0;
}
}
for (i=0, j=0; j<MAX_STAT_DEVICES; i++) {
while (!stat_devices[j].name[0] && j < MAX_STAT_DEVICES)
j++;
if (j < MAX_STAT_DEVICES && i != j) {
stat_devices[i] = stat_devices[j];
}
j++;
}
i--;
for (j=0; j<MAX_STAT_DEVICES; j++) {
if (foundbuffer[j][0]) {
strcpy(stat_devices[i].name, foundbuffer[j]);
for (k=0; k<48; k++) {
stat_devices[i].his[k][0] = 0;
stat_devices[i].his[k][1] = 0;
}
i++;
}
}
return devsfound;
}
/*******************************************************************************\
|* DrawStats *|
\*******************************************************************************/
void DrawStats(int *his, int num, int size, int x_left, int y_bottom) {
int pixels_per_byte;
int j,k;
int *p;
int p0,p1,p2,p3;
pixels_per_byte = 1*size;
p = his;
for (j=0; j<num; j++) {
if (p[0] + p[1] > pixels_per_byte)
pixels_per_byte = p[0] + p[1];
p += 2;
}
pixels_per_byte /= size;
p = his;
for (k=0; k<num; k++) {
p0 = p[0];
p1 = p[1];
if (WaveForm) {
p2 = 0;
p3 = 1;
for (j=0; j<size; j++) {
if (j < p0 / pixels_per_byte)
copyXPMArea(100+2, 68, 1, 1, k+x_left, y_bottom-size/2+p2/2);
else if (j < (p0 + p1) / pixels_per_byte)
copyXPMArea(100+1, 68, 1, 1, k+x_left, y_bottom-size/2+p2/2);
else
copyXPMArea(100+0, 68, 1, 1, k+x_left, y_bottom-size/2+p2/2);
p2 = (p2 + p3);
p3 *= -1;
p2 *= -1;
}
copyXPMArea(100+3, 68, 1, 1, k+x_left, y_bottom-size/2);
} else {
for (j=0; j<size; j++) {
if (j < p0 / pixels_per_byte)
copyXPMArea(100+2, 68, 1, 1, k+x_left, y_bottom-j);
else if (j < (p0 + p1) / pixels_per_byte)
copyXPMArea(100+1, 68, 1, 1, k+x_left, y_bottom-j);
else
copyXPMArea(100+0, 68, 1, 1, k+x_left, y_bottom-j);
}
}
p += 2;
}
}
/*******************************************************************************\
|* usage *|
\*******************************************************************************/
void usage(void) {
fprintf(stderr, "\nwmifs - programming: tijno, (de)bugging & design: warpstah, webhosting: bobby \n\n");
fprintf(stderr, "usage:\n");
fprintf(stderr, "\t-d <display name>\n");
fprintf(stderr, "\t-h\tthis help screen\n");
fprintf(stderr, "\t-i <interface name>\tdefault (as it appears in /proc/net/route)\n");
fprintf(stderr, "\t-v\tprint the version number\n");
fprintf(stderr, "\t-w\twaveform load\n");
fprintf(stderr, "\n");
}
/*******************************************************************************\
|* printversion *|
\*******************************************************************************/
void printversion(void) {
fprintf(stderr, "%s\n", WMIFS_VERSION);
}
/*******************************************************************************\
|* get_ppp_stats *|
\*******************************************************************************/
void get_ppp_stats(struct ppp_stats *cur) {
struct ifpppstatsreq req;
memset(&req, 0, sizeof(req));
req.stats_ptr = (caddr_t) &req.stats;
sprintf(req.ifr__name, "ppp%d", PPP_UNIT);
if (ioctl(ppp_h, SIOCGPPPSTATS, &req) < 0) {
fprintf(stderr, "heyho!\n");
}
*cur = req.stats;
}
#define LED_SZE_X (4)
#define LED_SZE_Y (4)
#define LED_ON_NET_X (87)
#define LED_ON_NET_Y (66)
#define LED_OFF_NET_X (93)
#define LED_OFF_NET_Y (66)
#define LED_ERR_NET_X (81)
#define LED_ERR_NET_Y (66)
#define LED_ON_SW_NET_X (49)
#define LED_ON_SW_NET_Y (85)
#define LED_OFF_SW_NET_X (44)
#define LED_OFF_SW_NET_Y (85)
#define LED_PWR_X (53)
#define LED_PWR_Y (7)
#define LED_SND_X (47)
#define LED_SND_Y (7)
#define LED_RCV_X (41)
#define LED_RCV_Y (7)
#define LED_SW_X (38)
#define LED_SW_Y (14)
/*******************************************************************************\
|* SetOnLED *|
\*******************************************************************************/
void SetOnLED(int led) {
switch (led) {
case LED_NET_RX:
copyXPMArea(LED_ON_NET_X, LED_ON_NET_Y, LED_SZE_X, LED_SZE_Y, LED_RCV_X, LED_RCV_Y);
break;
case LED_NET_TX:
copyXPMArea(LED_ON_NET_X, LED_ON_NET_Y, LED_SZE_X, LED_SZE_Y, LED_SND_X, LED_SND_Y);
break;
case LED_NET_POWER:
copyXPMArea(LED_ON_NET_X, LED_ON_NET_Y, LED_SZE_X, LED_SZE_Y, LED_PWR_X, LED_PWR_Y);
break;
}
}
/*******************************************************************************\
|* SetOffLED *|
\*******************************************************************************/
void SetOffLED(int led) {
switch (led) {
case LED_NET_RX:
copyXPMArea(LED_OFF_NET_X, LED_OFF_NET_Y, LED_SZE_X, LED_SZE_Y, LED_RCV_X, LED_RCV_Y);
break;
case LED_NET_TX:
copyXPMArea(LED_OFF_NET_X, LED_OFF_NET_Y, LED_SZE_X, LED_SZE_Y, LED_SND_X, LED_SND_Y);
break;
case LED_NET_POWER:
copyXPMArea(LED_OFF_NET_X, LED_OFF_NET_Y, LED_SZE_X, LED_SZE_Y, LED_PWR_X, LED_PWR_Y);
break;
}
}
/*******************************************************************************\
|* SetErrLED *|
\*******************************************************************************/
void SetErrLED(int led) {
switch (led) {
case LED_NET_POWER:
copyXPMArea(LED_ERR_NET_X, LED_ERR_NET_Y, LED_SZE_X, LED_SZE_Y, LED_PWR_X, LED_PWR_Y);
break;
}
}