diff options
| -rw-r--r-- | test/Makefile | 12 | ||||
| -rw-r--r-- | test/demo.menu | 2 | ||||
| -rw-r--r-- | test/mcast_launcher.cxx | 164 | ||||
| -rw-r--r-- | test/mcast_rx.cxx | 160 | ||||
| -rw-r--r-- | test/mcast_tx.cxx | 144 |
5 files changed, 2 insertions, 480 deletions
diff --git a/test/Makefile b/test/Makefile index 2692ef1da..2dc3145ea 100644 --- a/test/Makefile +++ b/test/Makefile @@ -48,7 +48,6 @@ CPPFILES =\ cursor.cxx \ curve.cxx \ demo.cxx \ - dnd-test.cxx \ doublebuffer.cxx \ editor.cxx \ fast_slow.cxx \ @@ -94,10 +93,7 @@ CPPFILES =\ tile.cxx \ tiled_image.cxx \ valuators.cxx \ - utf8.cxx \ - mcast_launcher.cxx \ - mcast_tx.cxx \ - mcast_rx.cxx + utf8.cxx ALL = \ unittests$(EXEEXT) \ @@ -117,7 +113,6 @@ ALL = \ cursor$(EXEEXT) \ curve$(EXEEXT) \ demo$(EXEEXT) \ - dnd-test$(EXEEXT) \ doublebuffer$(EXEEXT) \ editor$(EXEEXT) \ fast_slow$(EXEEXT) \ @@ -158,10 +153,7 @@ ALL = \ tile$(EXEEXT) \ tiled_image$(EXEEXT) \ valuators$(EXEEXT) \ - utf8$(EXEEXT) \ - mcast_launcher$(EXEEXT) \ - mcast_tx$(EXEEXT) \ - mcast_rx$(EXEEXT) + utf8$(EXEEXT) GLALL = \ diff --git a/test/demo.menu b/test/demo.menu index f0b1e2628..32f6d08c4 100644 --- a/test/demo.menu +++ b/test/demo.menu @@ -50,8 +50,6 @@ @u:keyboard:keyboard @u:fast && slow widgets:fast_slow @u:inactive:inactive -# @u:Drag Drop:dnd-test -# @u:add_fd():mcast_launcher @main:Fluid\n(UI design tool):../fluid/fluid valuators.fl diff --git a/test/mcast_launcher.cxx b/test/mcast_launcher.cxx deleted file mode 100644 index f2601262e..000000000 --- a/test/mcast_launcher.cxx +++ /dev/null @@ -1,164 +0,0 @@ -/* This is just a simple wrapper app that launches two independent processes then exits... - * I use it because the fltk test/demo program launches one process per button, and I wanted - * to launch several in my multicast/Fl::add_fd() test harness. - * - * This code also shows how to find the "home" directory for any executable in a cross-platform - * way, which can be handy for finding resources or help files. - */ -#ifdef WIN32 -#include <windows.h> /* GetModuleFileName */ -#endif /* WIN32 */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -#ifdef __APPLE__ /* assume this is OSX */ -#include <sys/param.h> -#include <mach-o/dyld.h> /* _NSGetExecutablePath : must add -framework CoreFoundation to link line */ -#include <string.h> -# ifndef PATH_MAX -# define PATH_MAX MAXPATHLEN -# endif -#endif /* APPLE */ - -#ifndef PATH_MAX -# define PATH_MAX 2048 -#endif -/*******************************************************************************************/ -static int get_app_path (char *pname, size_t pathsize) -{ - long result; - -#if defined (WIN32) - result = GetModuleFileName(NULL, pname, pathsize); - if (result > 0) { - /* fix up the dir slashes... */ - int len = strlen(pname); - int idx; - for (idx = 0; idx < len; idx++) { - if (pname[idx] == '\\') pname[idx] = '/'; - } - if ((access(pname, 0) == 0)) { - return 0; /* file exists, return OK */ - } - /*else name doesn't seem to exist, return FAIL (falls through) */ - } - -#elif defined (SOLARIS) // we used to set this for our all our Sun builds - I wonder what Sun set...? - char *p = getexecname(); - if (p) { - /* According to the Sun manpages, getexecname will "normally" return an */ - /* absolute path - BUT might not... AND that IF it is not, pre-pending */ - /* getcwd() will "usually" be the correct thing... Urgh! */ - - /* check pathname is absolute (begins with a / ) */ - if (p[0] == '/') { /* assume this means we have an absolute path */ - strncpy(pname, p, pathsize); - if ((access(pname, 0) == 0)) - return 0; /* file exists, return OK */ - } else { /* if not, prepend getcwd() then check if file exists */ - getcwd(pname, pathsize); - result = strlen(pname); - strncat(pname, "/", (pathsize - result)); - result ++; - strncat(pname, p, (pathsize - result)); - - if ((access(pname, 0) == 0)) - return 0; /* file exists, return OK */ - /*else name doesn't seem to exist, return FAIL (falls through) */ - } - } - -#elif defined (__APPLE__) /* assume this is OSX */ -/* extern int _NSGetExecutablePath(char *buf, unsigned long *bufsize); - - _NSGetExecutablePath copies the path of the executable - into the buffer and returns 0 if the path was successfully - copied in the provided buffer. If the buffer is not large - enough, -1 is returned and the expected buffer size is - copied in *bufsize. Note that _NSGetExecutablePath will - return "a path" to the executable not a "real path" to the - executable. That is the path may be a symbolic link and - not the real file. And with deep directories the total - bufsize needed could be more than MAXPATHLEN. -*/ - int status = -1; - char *given_path = (char *)malloc(MAXPATHLEN * 2); - if (!given_path) return status; - - pathsize = MAXPATHLEN * 2; - result = _NSGetExecutablePath(given_path, (uint32_t *)&pathsize); - if (result == 0) { /* OK, we got something - now try and resolve the real path... */ - if (realpath(given_path, pname) != NULL) { - if ((access(pname, 0) == 0)) { - status = 0; /* file exists, return OK */ - } - } - } - free (given_path); - return status; - -#else // just assume this is linux for now - not valid - what about BSD's etc...? - /* Oddly, the readlink(2) man page says no NULL is appended. */ - /* So you have to do it yourself, based on the return value: */ - pathsize --; /* Preserve a space to add the trailing NULL */ - result = readlink("/proc/self/exe", pname, pathsize); - - if (result > 0) { - pname[result] = 0; /* add a terminating NULL */ - - if ((access(pname, 0) == 0)) { - return 0; /* file exists, return OK */ - } - /*else name doesn't seem to exist, return FAIL (falls through) */ - } -#endif /* LINUX (assumed!) */ - - return -1; /* Path Lookup Failed */ -} // get_app_path - -/*******************************************************************************************/ -static void app_launch(const char *cmd) -{ -#ifdef WIN32 - // Under win32 you can't just use "system" and background the process to easily launch - // another executable - so we use spawn instead... - _spawnl(_P_NOWAIT, cmd, cmd, NULL); -#else - // On other systems, just use system to launch the executable - char buf[PATH_MAX]; - snprintf(buf, PATH_MAX, "%s &", cmd); - system(buf); -#endif -} // app_launch - -/*******************************************************************************************/ -int main(int argc, char *argv[]) -{ - char launcher_path[PATH_MAX]; - char exe_path[PATH_MAX]; - // Find where the launcher app lives - we assume the test executables are in the same location - int fail = get_app_path (launcher_path, PATH_MAX); - if (fail) // couldn't get a valid path... - return -1; - - // not all supported platfoms provide a dirname function - do a simplified version here - strncpy(exe_path, launcher_path, PATH_MAX); - // find the last dir sep (note that get_app_path uses '/' on win32 also) - char *dirp = strrchr(exe_path, '/'); - dirp ++; // first char after the dir slash - *dirp = 0; // terminate the path, removing the executables basename - - strncat(exe_path, "mcast_tx", PATH_MAX); - app_launch(exe_path); // launch the sender - - *dirp = 0; // terminate the path - again - strncat(exe_path, "mcast_rx", PATH_MAX); - app_launch(exe_path); // launch the receiver - - return 0; -} - -/* end of file */ diff --git a/test/mcast_rx.cxx b/test/mcast_rx.cxx deleted file mode 100644 index d346d845a..000000000 --- a/test/mcast_rx.cxx +++ /dev/null @@ -1,160 +0,0 @@ -/* Test multicast operation and Fl::add_fd functionality */ -/* This file is the multicast Receiver - there can be multiple instances - * of this running during the test. A minimum of one is good...! */ - -#ifdef WIN32 -# include <windows.h> -# include <winsock2.h> -# include <ws2tcpip.h> -# define CLOSESKT closesocket -#else -# include <sys/socket.h> -# include <netinet/in.h> -# include <arpa/inet.h> -# include <netdb.h> -# define CLOSESKT close -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> - -#include <FL/Fl.H> -#include <FL/Fl_Double_Window.H> -#include <FL/Fl_Browser.H> -#include <FL/Fl_Button.H> -#include <FL/Fl_Round_Button.H> - -// define an arbitrary multicast address with organisation-local scope -static char madrs[] = "239.192.34.56"; -#define SERVER_PORT 5678 -#define MAX_MSG 100 - -static Fl_Double_Window *rx_win; -static Fl_Browser *rx_brws; -static Fl_Button *exit_bt; -static Fl_Round_Button *wait_bt; - -/*******************************************************************************************/ -static void cb_exit_bt(Fl_Button*, void*) { - rx_win->hide(); -} - -/*******************************************************************************************/ -static void led_flash(void*) { - static int led = 0; - led = led ^ 1; - wait_bt->value(led); - Fl::repeat_timeout(0.4, led_flash); -} - -/*******************************************************************************************/ -static void skt_cb(int skt, void*) { - struct sockaddr_in cliAddr; - char msg[MAX_MSG]; - socklen_t cliLen = sizeof (cliAddr); - int n = recvfrom (skt, msg, MAX_MSG, 0, (struct sockaddr *)&cliAddr, &cliLen); - if (n < 0) return; - rx_brws->add(msg); - int last = rx_brws->size(); - rx_brws->bottomline(last); -} - -/*******************************************************************************************/ -int main (int argc, char *argv[]) -{ - // First, create the socket layer - int skt, res; - struct ip_mreq mreq; - struct sockaddr_in servAddr; - struct in_addr mcastAddr; - struct hostent *h; - -#ifdef WIN32 - // On win32, make sure the winsock layer is started - WSADATA WSAData; - WSAStartup (MAKEWORD (1, 1), &WSAData); -#endif - - /* set mcast address to listen to */ - h = gethostbyname(madrs); - if (h == NULL) { - exit (-1); - } - - memcpy(&mcastAddr, h->h_addr_list[0], h->h_length); - - /* create the socket */ - skt = socket (AF_INET, SOCK_DGRAM, 0); - if (skt < 0) { - fprintf (stderr, "cannot create socket\n"); - exit (-1); - } - - /* set socket to allow re-use of local address before bind() - this should allow us to have - * multiple receiver instances all running at once. */ - int bReUse = 1; - setsockopt(skt, SOL_SOCKET, SO_REUSEADDR, (char *)&bReUse, sizeof(bReUse)); - - // Populate the servAddr struct - servAddr.sin_family = AF_INET; - servAddr.sin_addr.s_addr = htonl (INADDR_ANY); - servAddr.sin_port = htons (SERVER_PORT); - - /* bind port */ - if (bind (skt, (struct sockaddr *) &servAddr, sizeof (servAddr)) < 0) { - fprintf(stderr, "cannot bind port %d \n", SERVER_PORT); - exit (-1); - } - - /* join multicast group */ - mreq.imr_multiaddr.s_addr = mcastAddr.s_addr; - mreq.imr_interface.s_addr = htonl (INADDR_ANY); - - res = setsockopt(skt, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)); - if (res != 0) { - fprintf(stderr, "cannot join multicast group '%s'", inet_ntoa(mcastAddr)); - exit (-1); - } - - // Now create the fltk display window - rx_win = new Fl_Double_Window(600, 100, 447, 338, "Receiver"); - rx_win->begin(); - - // A browser to display the rx'd text in - rx_brws = new Fl_Browser(10, 10, 285, 310); - rx_brws->when(FL_WHEN_NEVER); - - // quit button - exit_bt = new Fl_Button(360, 290, 64, 30, "Quit"); - exit_bt->box(FL_THIN_UP_BOX); - exit_bt->callback((Fl_Callback*)cb_exit_bt); - - // flashing red "waiting" led... - wait_bt = new Fl_Round_Button(320, 20, 69, 30, "Waiting"); - wait_bt->selection_color(FL_RED); - wait_bt->when(FL_WHEN_NEVER); - wait_bt->clear_visible_focus(); - - rx_win->end(); - - // display the Rx window - rx_win->show(argc, argv); - - // Start the "waiting led" flashing - Fl::add_timeout(0.4, led_flash); - - // Add the socket to the add_fd check list - Fl::add_fd(skt, skt_cb); - - // run the fltk core - res = Fl::run(); - - /* close socket and exit */ - CLOSESKT(skt); - return res; -} - -/* End of File */ diff --git a/test/mcast_tx.cxx b/test/mcast_tx.cxx deleted file mode 100644 index 11bd5a7eb..000000000 --- a/test/mcast_tx.cxx +++ /dev/null @@ -1,144 +0,0 @@ -/* Test multicast operation and Fl::add_fd functionality */ -/* This file is the multicast Transmitter - there should be one instance - * of this running during the test. */ - -#ifdef WIN32 -# include <winsock2.h> -# include <ws2tcpip.h> -# define CLOSESKT closesocket -#else -# include <sys/socket.h> -# include <netinet/in.h> -# include <arpa/inet.h> -# include <netdb.h> -# define CLOSESKT close -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> - -#include <FL/Fl.H> -#include <FL/Fl_Double_Window.H> -#include <FL/Fl_Button.H> -#include <FL/Fl_Round_Button.H> - -// define an arbitrary multicast address with organisation-local scope -static char madrs[] = "239.192.34.56"; -#define SERVER_PORT 5678 - -static Fl_Double_Window *tx_win; -static Fl_Button *send_bt; -static Fl_Button *exit_bt; -static Fl_Round_Button *ready_bt; - -static int skt; -static struct sockaddr_in servAddr; - -/*******************************************************************************************/ -static void cb_exit_bt(Fl_Button*, void*) { - tx_win->hide(); -} - -/*******************************************************************************************/ -static void led_flash(void*) { - static int led = 0; - led = led ^ 1; - ready_bt->value(led); - Fl::repeat_timeout(0.4, led_flash); -} - -/*******************************************************************************************/ -static void send_cb(Fl_Button*, void*) { /* send some data */ - static int msg_idx = 0; - char msg[128]; - for (int i = 0; i < 3; i++) - { - sprintf(msg, "Message text %d", msg_idx); - msg_idx++; - sendto(skt, msg, strlen(msg) + 1, 0, (struct sockaddr *)&servAddr, sizeof(servAddr)); - } /* end for */ -} - -/*******************************************************************************************/ -int main (int argc, char *argv[]) -{ - // First prepare the socket layer code - struct sockaddr_in cliAddr; - struct hostent *h; - -#ifdef WIN32 - // On win32, make sure the winsock layer is started - WSADATA WSAData; - WSAStartup (MAKEWORD (1, 1), &WSAData); -#endif - - h = gethostbyname(madrs); - if (h == NULL) { - exit (-1); - } - - // Populate the servAddr struct with the requested values - servAddr.sin_family = h->h_addrtype; - memcpy ((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); - servAddr.sin_port = htons (SERVER_PORT); - - /* create the socket */ - skt = socket (AF_INET, SOCK_DGRAM, 0); - if (skt < 0) { - fprintf(stderr, "cannot open socket\n"); - exit (-1); - } - - /* bind port number */ - cliAddr.sin_family = AF_INET; - cliAddr.sin_addr.s_addr = htonl(INADDR_ANY); // assume default eth_if is fine - cliAddr.sin_port = htons (0); - if (bind(skt, (struct sockaddr *)&cliAddr, sizeof(cliAddr)) < 0) { - fprintf(stderr, "cannot bind port %d \n", SERVER_PORT); - exit (-1); - } - - /* set the IP TTL to 1, so our multicast datagrams can not get off the local network */ - char ttl = 1; - setsockopt (skt, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); - - // Now create the fltk window - tx_win = new Fl_Double_Window(100, 100, 447, 338, "Sender"); - tx_win->begin(); - - // msg send button - send_bt = new Fl_Button(100, 100, 100, 50, "SEND"); - send_bt->box(FL_THIN_UP_BOX); - send_bt->callback((Fl_Callback*)send_cb); - - // quit button - exit_bt = new Fl_Button(360, 290, 64, 30, "Quit"); - exit_bt->box(FL_THIN_UP_BOX); - exit_bt->callback((Fl_Callback*)cb_exit_bt); - - // flashing green "ready" led... - ready_bt = new Fl_Round_Button(320, 20, 69, 30, "Ready"); - ready_bt->selection_color(FL_GREEN); - ready_bt->when(FL_WHEN_NEVER); - ready_bt->clear_visible_focus(); - - tx_win->end(); - - // display the Tx window - tx_win->show(argc, argv); - - // Start the "ready led" flashing - Fl::add_timeout(0.4, led_flash); - - // run the fltk core - int res = Fl::run(); - - /* close socket and exit */ - CLOSESKT(skt); - return res; -} - -/* End of File */ |
