summaryrefslogtreecommitdiffstats
path: root/x11/gnome-applets/files
diff options
context:
space:
mode:
Diffstat (limited to 'x11/gnome-applets/files')
-rw-r--r--x11/gnome-applets/files/patch-aa44
-rw-r--r--x11/gnome-applets/files/patch-ad354
-rw-r--r--x11/gnome-applets/files/patch-battstat_Makefile.in27
-rw-r--r--x11/gnome-applets/files/patch-gkb-new_presets.c11
-rw-r--r--x11/gnome-applets/files/patch-stickynotes_Makefile.in11
-rw-r--r--x11/gnome-applets/files/patch-wireless_wireless-applet.c315
6 files changed, 762 insertions, 0 deletions
diff --git a/x11/gnome-applets/files/patch-aa b/x11/gnome-applets/files/patch-aa
new file mode 100644
index 000000000..6638e387e
--- /dev/null
+++ b/x11/gnome-applets/files/patch-aa
@@ -0,0 +1,44 @@
+--- configure.orig Mon Sep 8 20:00:28 2003
++++ configure Wed Sep 24 23:29:28 2003
+@@ -8250,6 +8250,7 @@
+
+ # This can be used to rebuild libtool when needed
+ LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
++$ac_aux_dir/ltconfig $LIBTOOL_DEPS
+
+ # Always use our own libtool.
+ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+@@ -11792,6 +11793,7 @@
+ *irix*) CDROM_HOST=irix; CDROM_LIBS="-lcdaudio -lmediad -lds";cd_device_path="/dev/cdrom";;
+ *linux*) CDROM_HOST=linux;cd_device_path="/dev/cdrom";;
+ *netbsd*) CDROM_HOST=netbsd;cd_device_path="/dev/rcd0";;
++*freebsd*) CDROM_HOST=freebsd;cd_device_path="/dev/acd0c";;
+ *solaris*) CDROM_HOST=solaris;cd_device_path="/vol/dev/aliases/cdrom0";cdplayer_type_sun=true;;
+ esac
+ case "$host" in
+@@ -11856,7 +11858,7 @@
+
+ ;;
+ # list of supported OS cores
+- *-*-linux*|*-*-freebsd*|*-*-openbsd*)
++ *-*-linux*|i386-*-freebsd*|*-*-openbsd*)
+ echo "$as_me:$LINENO: checking for apm_read in -lapm" >&5
+ echo $ECHO_N "checking for apm_read in -lapm... $ECHO_C" >&6
+ if test "${ac_cv_lib_apm_apm_read+set}" = set; then
+@@ -13646,14 +13648,14 @@
+ ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
+
+ cat >>confdefs.h <<_ACEOF
+-#define GNOME_ICONDIR "${prefix}/share/pixmaps"
++#define GNOME_ICONDIR "${datadir}/pixmaps"
+ _ACEOF
+
+
+ #defined the below to enable help to work for applets
+
+ cat >>confdefs.h <<_ACEOF
+-#define DATADIR "${prefix}/share"
++#define DATADIR "${datadir}"
+ _ACEOF
+
+ cat >>confdefs.h <<_ACEOF
diff --git a/x11/gnome-applets/files/patch-ad b/x11/gnome-applets/files/patch-ad
new file mode 100644
index 000000000..5a06416a0
--- /dev/null
+++ b/x11/gnome-applets/files/patch-ad
@@ -0,0 +1,354 @@
+--- cdplayer/cdplayer.c.orig Tue Apr 16 16:42:54 2002
++++ cdplayer/cdplayer.c Tue Apr 30 17:31:41 2002
+@@ -671,6 +671,12 @@
+ description = TRUE;
+ break;
+ case DISC_COMPLETED:
++ led_time(cd->panel.time,
++ stat.relative_address.minute,
++ stat.relative_address.second,
++ cd->panel.track_control.display,
++ stat.track);
++ break;
+ case DISC_STOP:
+ case DISC_ERROR:
+ led_stop(cd->panel.time, cd->panel.track_control.display);
+--- /dev/null Mon May 29 02:15:42 2000
++++ cdplayer/cdrom-freebsd.c Mon May 29 10:37:28 2000
+@@ -0,0 +1,336 @@
++#include <stdlib.h>
++#include <string.h>
++#include <fcntl.h>
++#include <glib.h>
++#include <sys/ioctl.h>
++#include <unistd.h>
++
++#include <sys/types.h>
++#include <sys/cdio.h>
++#include "cdrom-interface.h"
++
++
++#define ASSIGN_MSF(dest, src) \
++{ \
++ (dest).minute = (src).minute; \
++ (dest).second = (src).second; \
++ (dest).frame = (src).frame; \
++}
++
++int
++cdrom_play(cdrom_device_t cdp, int start, int stop)
++{
++ struct ioc_play_track ti;
++
++ ti.start_track = start;
++ ti.start_index = 1;
++ ti.end_track = stop;
++ ti.end_index = 1;
++
++ if ((ioctl(cdp->device, CDIOCPREVENT) == -1) ||
++ (ioctl(cdp->device, CDIOCPLAYTRACKS, &ti) == -1)) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_play_msf(cdrom_device_t cdp, cdrom_msf_t * start)
++{
++ struct ioc_play_msf msf;
++
++ if (cdrom_read_track_info(cdp) == DISC_IO_ERROR)
++ return DISC_IO_ERROR;
++ msf.start_m = start->minute;
++ msf.start_s = start->second;
++ msf.start_f = start->frame;
++
++ msf.end_m = cdp->track_info[cdp->nr_track].address.minute;
++ msf.end_s = cdp->track_info[cdp->nr_track].address.second;
++ msf.end_f = cdp->track_info[cdp->nr_track].address.frame;
++
++ if ((ioctl(cdp->device, CDIOCPREVENT) == -1) ||
++ (ioctl(cdp->device, CDIOCPLAYMSF, &msf) == -1)) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_pause(cdrom_device_t cdp)
++{
++ if (ioctl(cdp->device, CDIOCPAUSE) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ return DISC_IO_ERROR;
++}
++
++int
++cdrom_resume(cdrom_device_t cdp)
++{
++ if (ioctl(cdp->device, CDIOCRESUME) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++
++int
++cdrom_stop(cdrom_device_t cdp)
++{
++ if ((ioctl(cdp->device, CDIOCSTOP) == -1) ||
++ (ioctl(cdp->device, CDIOCALLOW) == -1)) {
++ cdp->my_errno = errno;
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_read_track_info(cdrom_device_t cdp)
++{
++ struct ioc_toc_header toc;
++ struct ioc_read_toc_single_entry tocentry;
++
++ int i, j, nr_track;
++
++ if (ioctl(cdp->device, CDIOREADTOCHEADER, &toc) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ cdp->track0 = toc.starting_track;
++ cdp->track1 = toc.ending_track;
++ nr_track = cdp->track1 - cdp->track0 + 1;
++ if (nr_track <= 0)
++ return DISC_IO_ERROR;
++
++ if (nr_track != cdp->nr_track) {
++ if (cdp->track_info)
++ g_free(cdp->track_info);
++ cdp->nr_track = nr_track;
++ cdp->track_info = g_malloc((cdp->nr_track + 1) * sizeof(track_info_t));
++ }
++ for (i = 0, j = cdp->track0; i < cdp->nr_track; i++, j++) {
++ tocentry.track = j;
++ tocentry.address_format = CD_MSF_FORMAT;
++
++ if (ioctl(cdp->device, CDIOREADTOCENTRY, &tocentry) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ /* fill the trackinfo field */
++ cdp->track_info[i].track = j;
++ cdp->track_info[i].audio_track = tocentry.entry.control !=
++ 0x04 ? 1 : 0;
++ ASSIGN_MSF(cdp->track_info[i].address, tocentry.entry.addr.msf);
++ }
++
++ tocentry.track = 0xAA;
++ tocentry.address_format = CD_MSF_FORMAT;
++ if (ioctl(cdp->device, CDIOREADTOCENTRY, &tocentry) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ cdp->track_info[i].track = j;
++ cdp->track_info[i].audio_track = 0;
++ ASSIGN_MSF(cdp->track_info[i].address, tocentry.entry.addr.msf);
++
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_get_status(cdrom_device_t cdp, cdrom_device_status_t * stat)
++{
++ struct ioc_read_subchannel subchnl;
++ struct cd_sub_channel_info subchnlinfo;
++
++ subchnl.address_format = CD_MSF_FORMAT;
++ subchnl.data_format = CD_CURRENT_POSITION;
++ subchnl.track = 0;
++ subchnl.data_len = sizeof(subchnlinfo);
++ subchnl.data = &subchnlinfo;
++ if (ioctl(cdp->device, CDIOCREADSUBCHANNEL, &subchnl) == -1) {
++ cdp->my_errno = errno;
++ ioctl(cdp->device, CDIOCALLOW);
++ return DISC_IO_ERROR;
++ }
++ stat->track = subchnlinfo.what.position.track_number;
++ ASSIGN_MSF(stat->relative_address, subchnlinfo.what.position.reladdr.msf);
++ ASSIGN_MSF(stat->absolute_address, subchnlinfo.what.position.absaddr.msf);
++ switch (subchnlinfo.header.audio_status) {
++ case CD_AS_PLAY_IN_PROGRESS:
++ ioctl(cdp->device, CDIOCPREVENT);
++ stat->audio_status = DISC_PLAY;
++ break;
++ case CD_AS_PLAY_PAUSED:
++ ioctl(cdp->device, CDIOCPREVENT);
++ stat->audio_status = DISC_PAUSED;
++ break;
++ case CD_AS_PLAY_COMPLETED:
++ if (cdrom_read_track_info(cdp) == DISC_IO_ERROR)
++ return DISC_IO_ERROR;
++ stat->track = cdp->nr_track;
++ ASSIGN_MSF(stat->relative_address,
++ cdp->track_info[cdp->nr_track].address);
++ ASSIGN_MSF(stat->absolute_address,
++ cdp->track_info[cdp->nr_track].address);
++ ioctl(cdp->device, CDIOCALLOW);
++ stat->audio_status = DISC_COMPLETED;
++ break;
++ case CD_AS_AUDIO_INVALID:
++ case CD_AS_NO_STATUS:
++ case CD_AS_PLAY_ERROR:
++ ioctl(cdp->device, CDIOCALLOW);
++ stat->audio_status = DISC_STOP;
++ break;
++ default:
++ ioctl(cdp->device, CDIOCALLOW);
++ stat->audio_status = DISC_ERROR;
++ }
++ return (stat->audio_status == DISC_ERROR ?
++ DISC_IO_ERROR : DISC_NO_ERROR);
++}
++
++cdrom_device_t
++cdrom_open(char *device, int *errcode)
++{
++ cdrom_device_t cdp;
++
++ cdp = g_malloc(sizeof(struct cdrom_device));
++
++ cdp->device = open(device, O_RDONLY);
++ if (cdp->device == -1) {
++ *errcode = errno;
++ g_free(cdp);
++ return NULL;
++ }
++ cdp->nr_track = 0;
++ cdp->track_info = NULL;
++ return cdp;
++}
++
++void
++cdrom_close(cdrom_device_t cdp)
++{
++ if (cdp->nr_track)
++ g_free(cdp->track_info);
++ close(cdp->device);
++ g_free(cdp);
++}
++
++int
++cdrom_load(cdrom_device_t cdp)
++{
++ if ((ioctl(cdp->device, CDIOCCLOSE) == -1) ||
++ (ioctl(cdp->device, CDIOCALLOW) == -1)) {
++ cdp->my_errno = errno;
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_eject(cdrom_device_t cdp)
++{
++ if ((ioctl(cdp->device, CDIOCEJECT) == -1) ||
++ (ioctl(cdp->device, CDIOCALLOW) == -1)) {
++ cdp->my_errno = errno;
++ return DISC_IO_ERROR;
++ }
++ return DISC_NO_ERROR;
++}
++
++int
++cdrom_next(cdrom_device_t cdp)
++{
++ cdrom_device_status_t stat;
++
++ if ((cdrom_read_track_info(cdp) == DISC_IO_ERROR) ||
++ (cdrom_get_status(cdp, &stat) == DISC_IO_ERROR))
++ return DISC_IO_ERROR;
++ return cdrom_play(cdp, stat.track + 1, cdp->track1);
++}
++
++int
++cdrom_prev(cdrom_device_t cdp)
++{
++ cdrom_device_status_t stat;
++
++ if ((cdrom_read_track_info(cdp) == DISC_IO_ERROR) ||
++ (cdrom_get_status(cdp, &stat) == DISC_IO_ERROR))
++ return DISC_IO_ERROR;
++ return cdrom_play(cdp, stat.track - 1, cdp->track1);
++}
++
++int
++cdrom_rewind(cdrom_device_t cdp)
++{
++ cdrom_device_status_t stat;
++ int track;
++
++ if ((cdrom_read_track_info(cdp) == DISC_IO_ERROR) ||
++ (cdrom_get_status(cdp, &stat) == DISC_IO_ERROR))
++ return DISC_IO_ERROR;
++ if (stat.absolute_address.second != 0)
++ stat.absolute_address.second--;
++ else {
++ stat.absolute_address.second = 0;
++ if (stat.absolute_address.minute > 0)
++ stat.absolute_address.minute--;
++ }
++ stat.absolute_address.frame = 0;
++ return cdrom_play_msf(cdp, &stat.absolute_address);
++}
++
++int
++cdrom_ff(cdrom_device_t cdp)
++{
++ cdrom_device_status_t stat;
++ int track;
++
++ if ((cdrom_read_track_info(cdp) == DISC_IO_ERROR) ||
++ (cdrom_get_status(cdp, &stat) == DISC_IO_ERROR))
++ return DISC_IO_ERROR;
++ stat.absolute_address.second++;
++ if (stat.absolute_address.second >= 60) {
++ stat.absolute_address.minute++;
++ stat.absolute_address.second = 0;
++ }
++ stat.absolute_address.frame = 0;
++ return cdrom_play_msf(cdp, &stat.absolute_address);
++}
++
++int
++cdrom_track_length(cdrom_device_t cdp, int track, cdrom_msf_t * length)
++{
++ int index, s1, s2, i;
++
++ if ((track < cdp->track0) || (track > cdp->track1))
++ return DISC_INDEX_OUT_OF_RANGE;
++ index = track - cdp->track0;
++
++ s1 = cdp->track_info[index + 1].address.second;
++ s2 = cdp->track_info[index].address.second;
++ length->second = s1 = s1 - s2;
++ if (s1 < 0) {
++ i = 1;
++ length->second = s1 + 60;
++ } else
++ i = 0;
++
++ length->minute = cdp->track_info[index + 1].address.minute -
++ cdp->track_info[index].address.minute - i;
++
++ return 0;
++}
diff --git a/x11/gnome-applets/files/patch-battstat_Makefile.in b/x11/gnome-applets/files/patch-battstat_Makefile.in
new file mode 100644
index 000000000..6ddfc03c3
--- /dev/null
+++ b/x11/gnome-applets/files/patch-battstat_Makefile.in
@@ -0,0 +1,27 @@
+--- battstat/Makefile.in.orig Tue Sep 23 00:11:20 2003
++++ battstat/Makefile.in Tue Sep 23 00:14:03 2003
+@@ -154,11 +154,11 @@
+ pixmapsdir = $(datadir)/pixmaps
+ pixmaps_DATA = battstat.png
+ @HAVE_LIBAPM_TRUE@APMLIB = @HAVE_LIBAPM_TRUE@-lapm
+-@HAVE_LIBAPM_FALSE@APMLIB = @HAVE_LIBAPM_FALSE@apmlib/libapm.a
++@HAVE_LIBAPM_FALSE@APMLIB =
+ @HAVE_LIBAPM_TRUE@APMDIR =
+-@HAVE_LIBAPM_FALSE@APMDIR = @HAVE_LIBAPM_FALSE@apmlib
++@HAVE_LIBAPM_FALSE@APMDIR =
+ @HAVE_LIBAPM_TRUE@APMINC =
+-@HAVE_LIBAPM_FALSE@APMINC = @HAVE_LIBAPM_FALSE@-Iapmlib/
++@HAVE_LIBAPM_FALSE@APMINC =
+
+ SUBDIRS = docs sounds $(APMDIR)
+
+@@ -230,8 +230,7 @@
+ @HAVE_LIBAPM_TRUE@battstat_applet_2_DEPENDENCIES = \
+ @HAVE_LIBAPM_TRUE@$(top_builddir)/screen-exec/libscreen-exec.la
+ @HAVE_LIBAPM_FALSE@battstat_applet_2_DEPENDENCIES = \
+-@HAVE_LIBAPM_FALSE@$(top_builddir)/screen-exec/libscreen-exec.la \
+-@HAVE_LIBAPM_FALSE@apmlib/libapm.a
++@HAVE_LIBAPM_FALSE@$(top_builddir)/screen-exec/libscreen-exec.la
+ battstat_applet_2_LDFLAGS =
+ CFLAGS = @CFLAGS@
+ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
diff --git a/x11/gnome-applets/files/patch-gkb-new_presets.c b/x11/gnome-applets/files/patch-gkb-new_presets.c
new file mode 100644
index 000000000..f90708170
--- /dev/null
+++ b/x11/gnome-applets/files/patch-gkb-new_presets.c
@@ -0,0 +1,11 @@
+--- gkb-new/preset.c.orig Fri Mar 14 09:13:44 2003
++++ gkb-new/preset.c Fri Mar 14 09:13:54 2003
+@@ -42,7 +42,7 @@
+
+ /* TODO: user's local presets */
+
+- text = gnome_unconditional_datadir_file ("gnome/gkb/");
++ text = gnome_unconditional_datadir_file ("gkb/");
+ if (!text)
+ return NULL;
+ dir = opendir (text);
diff --git a/x11/gnome-applets/files/patch-stickynotes_Makefile.in b/x11/gnome-applets/files/patch-stickynotes_Makefile.in
new file mode 100644
index 000000000..973b7e342
--- /dev/null
+++ b/x11/gnome-applets/files/patch-stickynotes_Makefile.in
@@ -0,0 +1,11 @@
+--- stickynotes/Makefile.in.orig Thu Aug 28 01:00:09 2003
++++ stickynotes/Makefile.in Thu Aug 28 01:00:26 2003
+@@ -142,7 +142,7 @@
+
+ SUBDIRS = pixmaps docs
+
+-CFLAGS = -Wall -g
++CFLAGS += -Wall -g
+
+ INCLUDES = -I. -I$(srcdir) $(GNOME_APPLETS_CFLAGS) $(LIBGLADE_CFLAGS) -DGNOMELOCALEDIR=\""$(prefix)/share/locale"\" -DSTICKYNOTES_GLADEDIR=\"$(gladedir)\" -DSTICKYNOTES_ICONDIR=\"$(icondir)\"
+
diff --git a/x11/gnome-applets/files/patch-wireless_wireless-applet.c b/x11/gnome-applets/files/patch-wireless_wireless-applet.c
new file mode 100644
index 000000000..45c6f1251
--- /dev/null
+++ b/x11/gnome-applets/files/patch-wireless_wireless-applet.c
@@ -0,0 +1,315 @@
+--- wireless/wireless-applet.c.orig Tue Oct 21 19:06:53 2003
++++ wireless/wireless-applet.c Sat Nov 15 16:32:02 2003
+@@ -30,6 +30,15 @@
+ #include <math.h>
+ #include <dirent.h>
+
++#ifdef __FreeBSD__
++#include <sys/socket.h>
++#include <sys/ioctl.h>
++#include <net/if.h>
++#include <net/if_var.h>
++#include <dev/an/if_aironet_ieee.h>
++#include <dev/wi/if_wavelan_ieee.h>
++#endif
++
+ #include <gnome.h>
+ #include <panel-applet.h>
+ #include <panel-applet-gconf.h>
+@@ -37,7 +46,11 @@
+
+ #include <egg-screen-help.h>
+
++#ifdef __FreeBSD__
++#define CFG_DEVICE "an0"
++#else
+ #define CFG_DEVICE "eth0"
++#endif
+ #define CFG_UPDATE_INTERVAL 2
+
+ typedef enum {
+@@ -93,6 +106,12 @@
+ WirelessApplet *applet);
+ static void wireless_applet_about_cb (BonoboUIComponent *uic,
+ WirelessApplet *applet);
++#ifdef __FreeBSD__
++static int an_getval(WirelessApplet *applet, char *device, struct an_req *areq);
++static void get_an_data(WirelessApplet *applet, char *device, long int *level);
++static int wi_getval(WirelessApplet *applet, char *device, struct wi_req *areq);
++static void get_wi_data(WirelessApplet *applet, char *device, long int *level);
++#endif
+ static void prefs_response_cb (GtkDialog *dialog, gint response, gpointer data);
+
+ static const BonoboUIVerb wireless_menu_verbs [] = {
+@@ -150,9 +169,11 @@
+ g_free (tmp);
+
+ /* Update the image */
++#ifndef __FreeBSD__
+ percent = CLAMP (percent, -1, 100);
++#endif
+
+- if (percent < 0)
++ if (percent < 0 || percent > 100)
+ state = PIX_BROKEN;
+ else if (percent == 0)
+ state = PIX_NO_LINK;
+@@ -183,6 +204,7 @@
+ int percent;
+
+ /* Calculate the percentage based on the link quality */
++#ifndef __FreeBSD__
+ if (level < 0) {
+ percent = -1;
+ } else {
+@@ -193,6 +215,9 @@
+ percent = CLAMP (percent, 0, 100);
+ }
+ }
++#else
++ percent = (int)level;
++#endif
+
+ wireless_applet_draw (applet, percent);
+ }
+@@ -235,22 +260,179 @@
+ }
+ }
+
++#ifdef __FreeBSD__
++static int
++wi_getval(WirelessApplet *applet, char *device, struct wi_req *wreq)
++{
++ struct ifreq ifr;
++ int s;
++
++ bzero((char *)&ifr, sizeof(ifr));
++
++ strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
++ ifr.ifr_data = (caddr_t)wreq;
++
++ s = socket(AF_INET, SOCK_DGRAM, 0);
++
++ if (s == -1)
++ {
++ gtk_tooltips_set_tip (applet->tips,
++ GTK_WIDGET (applet),
++ "Socket Error",
++ NULL);
++ return 0;
++ }
++
++ if (ioctl(s, SIOCGWAVELAN, &ifr) == -1)
++ {
++ gtk_tooltips_set_tip (applet->tips,
++ GTK_WIDGET (applet),
++ "ioctl Error",
++ NULL);
++ return 0;
++ }
++
++ close(s);
++
++ return 1;
++}
++
++static void
++get_wi_data (WirelessApplet *applet, char *device, long int *level)
++{
++ struct wi_req wreq;
++ long int signal_strength;
++
++ bzero((char *)&wreq, sizeof(wreq));
++
++ wreq.wi_len = WI_MAX_DATALEN;
++ wreq.wi_type = WI_RID_COMMS_QUALITY;
++
++ (void)wi_getval(applet, device, &wreq);
++
++ signal_strength = (long int) (wreq.wi_val[1]);
++
++ memcpy(level, &signal_strength, sizeof(level));
++
++ return;
++}
++
++static int
++an_getval(WirelessApplet *applet, char *device, struct an_req *areq)
++{
++ struct ifreq ifr;
++ int s;
++
++ bzero((char *)&ifr, sizeof(ifr));
++
++ strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
++ ifr.ifr_data = (caddr_t)areq;
++
++ s = socket(AF_INET, SOCK_DGRAM, 0);
++
++ if (s == -1) {
++ gtk_tooltips_set_tip (applet->tips,
++ GTK_WIDGET (applet),
++ "Socket Error",
++ NULL);
++ return 0;
++ }
++
++ if (ioctl(s, SIOCGAIRONET, &ifr) == -1) {
++ gtk_tooltips_set_tip (applet->tips,
++ GTK_WIDGET (applet),
++ "ioctl Error",
++ NULL);
++ return 0;
++ }
++
++ close(s);
++ return 1;
++}
++
++static void
++get_an_data (WirelessApplet *applet, char *device, long int *level)
++{
++ struct an_req areq;
++ struct an_ltv_status *sts;
++#ifdef AN_RID_RSSI_MAP
++ struct an_ltv_rssi_map an_rssimap;
++#endif
++ long int signal_strength;
++ int rssimap_valid = 0;
++
++#ifdef AN_RID_RSSI_MAP
++ an_rssimap.an_len = sizeof(an_rssimap);
++ an_rssimap.an_type = AN_RID_RSSI_MAP;
++ rssimap_valid = an_getval(applet, device, (struct an_req*)&an_rssimap);
++#endif
++
++ areq.an_len = sizeof(areq);
++ areq.an_type = AN_RID_STATUS;
++
++ (void)an_getval(applet, device, &areq);
++
++ sts = (struct an_ltv_status *)&areq;
++#ifdef AN_RID_RSSI_MAP
++ if (rssimap_valid)
++ signal_strength = (long int)(an_rssimap.an_entries[
++ sts->an_normalized_strength].an_rss_pct);
++ else
++ signal_strength = (long int)(sts->an_normalized_strength);
++#else
++ signal_strength = (long int)(sts->an_normalized_rssi);
++#endif
++
++ memcpy(level, &signal_strength, sizeof(level));
++}
++#endif
++
+ /* check stats, modify the state attribute */
+ static void
+ wireless_applet_read_device_state (WirelessApplet *applet)
+ {
+- long int level, noise;
+- double link;
++ long int level;
+ char device[256];
++#ifdef __FreeBSD__
++ struct if_nameindex *ifstart, *ifs;
++#else
++ long int noise;
++ double link;
+ char line[256];
++#endif
+
+ /* resest list of available wireless devices */
+ g_list_foreach (applet->devices, (GFunc)g_free, NULL);
+ g_list_free (applet->devices);
+ applet->devices = NULL;
+
++#ifdef __FreeBSD__
++ ifs = ifstart = if_nameindex();
++#endif
+ /* Here we begin to suck... */
+ do {
++#ifdef __FreeBSD__
++ if (ifs == NULL || ifs->if_name == NULL) {
++ break;
++ }
++ strlcpy(device, ifs->if_name, 6);
++ if (g_strncasecmp(device, "an", 2)==0) {
++ applet->devices = g_list_prepend (applet->devices, g_strdup (device));
++ if (g_strcasecmp(applet->device, device)==0) {
++ get_an_data(applet, device, &level);
++ wireless_applet_update_state (applet, device, 0, level, 0);
++ }
++ }
++ else
++ if (g_strncasecmp(device, "wi", 2)==0) {
++ applet->devices = g_list_prepend (applet->devices, g_strdup (device));
++ if (g_strcasecmp(applet->device, device)==0) {
++ get_wi_data(applet, device, &level);
++ wireless_applet_update_state (applet, device, 0, level, 0);
++ }
++ }
++ ifs++;
++#else
+ char *ptr;
+
+ fgets (line, 256, applet->file);
+@@ -283,6 +465,7 @@
+ wireless_applet_update_state (applet, device, link, level, noise);
+ }
+ }
++#endif
+ } while (1);
+
+ if (g_list_length (applet->devices)==1) {
+@@ -294,17 +477,23 @@
+ }
+
+ /* rewind the /proc/net/wireless file */
++#ifdef __FreeBSD__
++ if_freenameindex(ifstart);
++#else
+ rewind (applet->file);
++#endif
+ }
+
+ static int
+ wireless_applet_timeout_handler (WirelessApplet *applet)
+ {
++#ifndef __FreeBSD__
+ if (applet->file == NULL) {
+ wireless_applet_update_state (applet,
+ applet->device, -1, -1, -1);
+ return FALSE;
+ }
++#endif
+
+ wireless_applet_read_device_state (applet);
+
+@@ -351,6 +540,7 @@
+ static void
+ start_file_read (WirelessApplet *applet)
+ {
++#ifndef __FreeBSD__
+ applet->file = fopen ("/proc/net/wireless", "rt");
+ if (applet->file == NULL) {
+ gtk_tooltips_set_tip (applet->tips,
+@@ -359,6 +549,7 @@
+ NULL);
+ show_error_dialog (_("There doesn't seem to be any wireless devices configured on your system.\nPlease verify your configuration if you think this is incorrect."));
+ }
++#endif
+ }
+
+ static void
+@@ -646,8 +837,10 @@
+ applet->prefs = NULL;
+ }
+
++#ifndef __FreeBSD__
+ if (applet->file)
+ fclose (applet->file);
++#endif
+ if (applet->tips)
+ g_object_unref (applet->tips);
+ }