home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / UNIX / ARCHIE / CLIENTS / XARCHIE3.TAR / xarchie-2.0.1 / actions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-22  |  6.1 KB  |  297 lines

  1. /*
  2.  * actions.c : Widget action procedures
  3.  *
  4.  * Other modules also define actions, and call XtAppAddActions() when
  5.  * they are initialized.
  6.  *
  7.  * George Ferguson, ferguson@cs.rochester.edu, 2 Nov 1991.
  8.  * Version 2.0: 23 Apr 1993.
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <X11/Intrinsic.h>
  13. #include "xarchie.h"
  14. #include "browser.h"
  15. #include "types.h"
  16. #include "appres.h"
  17. #include "actions.h"
  18. #include "file-panel.h"
  19. #include "ftp-actions.h"
  20. #include "about.h"
  21. #ifdef HELP
  22. # include "help.h"
  23. #endif
  24. #include "query.h"
  25. #include "regex.h"
  26. #include "xutil.h"
  27. #include "stringdefs.h"
  28. #include "alert.h"
  29. #include "confirm.h"
  30. #include "debug.h"
  31. extern void abortDirsend();        /* dirsend.c */
  32. extern void ftpAbortTransfer();        /* ftp-actions.c */
  33.  
  34. /*
  35.  * Functions defined here
  36.  */
  37. void initActions();
  38.  
  39. static void quitAction();
  40. static void queryAction(),abortAction(),queryOrAbortAction();
  41. static void queryHostAction(),queryLocationAction();
  42. static void shiftDownAction(),shiftUpAction(),shiftTopAction();
  43. static void openAllAction(),openFilesAction(),openDirectoriesAction();
  44. static void getAction();
  45.  
  46. /*
  47.  * Data defined here:
  48.  */
  49. static XtActionsRec actionTable[] = {
  50.     { "quit",            quitAction },
  51.     { "query",            queryAction },
  52.     { "abort",            abortAction },
  53.     { "query-or-abort",        queryOrAbortAction },
  54.     { "query-host",        queryHostAction },
  55.     { "query-location",        queryLocationAction },
  56.     { "browser-down",        shiftDownAction },
  57.     { "browser-up",        shiftUpAction },
  58.     { "browser-top",        shiftTopAction },
  59.     { "browser-open-files",    openFilesAction },
  60.     { "browser-open-directories",    openDirectoriesAction },
  61.     { "browser-open-all",    openAllAction },
  62.     { "ftp-get",        getAction },
  63. };
  64.  
  65. /*    -    -    -    -    -    -    -    -    */
  66.  
  67. void
  68. initActions()
  69. {
  70.     XtAppAddActions(appContext,actionTable,XtNumber(actionTable));
  71.     initFtpActions();
  72.     initFilePanelActions();
  73.     initAboutActions();
  74. #ifdef HELP
  75.     initHelpActions();
  76. #endif
  77. }
  78.  
  79. /*    -    -    -    -    -    -    -    -    */
  80.  
  81. #define ACTION_PROC(NAME)    void NAME(w,event,params,num_params) \
  82.                     Widget w; \
  83.                     XEvent *event; \
  84.                     String *params; \
  85.                     Cardinal *num_params;
  86.  
  87. /*ARGSUSED*/
  88. static
  89. ACTION_PROC(quitAction)
  90. {
  91.     bye(0);
  92. }
  93.  
  94. /*ARGSUSED*/
  95. static
  96. ACTION_PROC(queryAction)
  97. {
  98.     char *s;
  99.     int len;
  100.     Boolean gif;
  101.  
  102.     if (getBrowserState() != BROWSER_READY) {
  103.     /* Don't do anything using popups since we could be in dirsend()
  104.        by now. */
  105.     XBell(display,0);
  106.     return;
  107.     }
  108.     if ((s=getWidgetString(searchText)) == NULL || *s == '\0') {
  109.     alert0("No search term specified.");
  110.     return;
  111.     }
  112. #ifndef DONT_CATCH_GIFS
  113.     len = strlen(s);
  114.     gif = False;
  115.     switch (appResources.searchType) {
  116.     case GfExact:
  117.         gif = ((len > 4 &&
  118.             (!strcmp(s+len-4,".gif") || !strcmp(s+len-4,".GIF"))) ||
  119.            (len > 6 &&
  120.             (!strcmp(s+len-6,".gif.Z") || !strcmp(s+len-6,".GIF.Z"))));
  121.         break;
  122.     case GfSubstr:
  123.     case GfExactSubstr:
  124.     case GfSubcase:
  125.     case GfExactSubcase:
  126.         gif = (strstr(s,"gif") || strstr(s,"GIF"));
  127.         break;
  128.     case GfRegexp:
  129.     case GfExactRegexp:
  130.         gif = (re_comp(s) == NULL &&
  131.            (re_exec("@PrObAbLyNoTaFiLe@.gif") ||
  132.             re_exec("@PrObAbLyNoTaFiLe@.gif.Z")));
  133.         break;
  134.     }
  135.     if (gif) {
  136.     if (!confirm0("Your search term will match GIFs. Do it anyway?"))
  137.         return;
  138.     else if (appResources.niceLevel <= 0 &&
  139.          !confirm0("Really do it without increasing niceness?"))
  140.         return;
  141.     }
  142. #endif /* DONT_CATCH_GIFS */
  143.     /* We're about to do the query, so disable querying */
  144.     setBrowserState(BROWSER_DIRSEND);
  145.     queryItemAndParse(s);
  146.     /* Re-enable querying */
  147.     setBrowserState(BROWSER_READY);
  148. }
  149.  
  150. /*ARGSUSED*/
  151. static
  152. ACTION_PROC(abortAction)
  153. {
  154.     DEBUG0("abortAction...\n");
  155.     XtSetSensitive(abortButton,False);
  156.     switch (getBrowserState()) {
  157.     case BROWSER_DIRSEND:
  158.         abortDirsend();
  159.         break;
  160.     case BROWSER_FTP:
  161.         ftpAbortTransfer();
  162.         break;
  163.     }
  164.     DEBUG0("abortAction: done\n");
  165. }
  166.  
  167. /*ARGSUSED*/
  168. static
  169. ACTION_PROC(queryOrAbortAction)
  170. {
  171.     DEBUG0("queryOrAbortAction...\n");
  172.     if (getBrowserState() == BROWSER_READY)
  173.     XtCallActionProc(toplevel,"query",NULL,NULL,0);
  174.     else
  175.     XtCallActionProc(toplevel,"abort",NULL,NULL,0);
  176.     DEBUG0("queryOrAbortAction: done\n");
  177. }
  178.  
  179. /*ARGSUSED*/
  180. static
  181. ACTION_PROC(queryHostAction)
  182. {
  183.     char *host;
  184.  
  185.     if (getBrowserState() != BROWSER_READY) {
  186.     XBell(display,0);
  187.     return;
  188.     }
  189.     if ((host=getWidgetString(hostText)) == NULL || *host == '\0') {
  190.     alert0("No host specified.");
  191.     return;
  192.     }
  193.     /* We're about to do the query, so disable querying */
  194.     setBrowserState(BROWSER_DIRSEND);
  195.     queryHostAndParse(host);
  196.     /* Re-enable querying */
  197.     setBrowserState(BROWSER_READY);
  198. }
  199.  
  200. /*ARGSUSED*/
  201. static
  202. ACTION_PROC(queryLocationAction)
  203. {
  204.     char *host,*loc;
  205.  
  206.     if (getBrowserState() != BROWSER_READY) {
  207.     XBell(display,0);
  208.     return;
  209.     }
  210.     if ((host=getWidgetString(hostText)) == NULL || *host == '\0') {
  211.     alert0("No host specified.");
  212.     return;
  213.     }
  214.     if ((loc=getWidgetString(locationText)) == NULL || *loc == '\0') {
  215.     alert0("No host specified.");
  216.     return;
  217.     }
  218.     /* We're about to do the query, so disable querying */
  219.     setBrowserState(BROWSER_DIRSEND);
  220.     queryLocationAndParse(host,loc);
  221.     /* Re-enable querying */
  222.     setBrowserState(BROWSER_READY);
  223. }
  224.  
  225. /*    -    -    -    -    -    -    -    -    */
  226.  
  227. /*ARGSUSED*/
  228. static
  229. ACTION_PROC(shiftDownAction)
  230. {
  231.     shiftBrowserDown();
  232. }
  233.  
  234. /*ARGSUSED*/
  235. static
  236. ACTION_PROC(shiftUpAction)
  237. {
  238.     shiftBrowserUp();
  239. }
  240.  
  241. /*ARGSUSED*/
  242. static
  243. ACTION_PROC(shiftTopAction)
  244. {
  245.     shiftBrowserTop();
  246. }
  247.  
  248. /*ARGSUSED*/
  249. static
  250. ACTION_PROC(openAllAction)
  251. {
  252.     if (getBrowserState() != BROWSER_READY) {
  253.     XBell(display,0);
  254.     return;
  255.     }
  256.     if (openBrowserAll() == 1)
  257.     shiftBrowserDown();
  258. }
  259.  
  260. /*ARGSUSED*/
  261. static
  262. ACTION_PROC(openDirectoriesAction)
  263. {
  264.     if (getBrowserState() != BROWSER_READY) {
  265.     XBell(display,0);
  266.     return;
  267.     }
  268.     if (openBrowserDirectories() == 1)
  269.     shiftBrowserDown();
  270. }
  271.  
  272. /*ARGSUSED*/
  273. static
  274. ACTION_PROC(openFilesAction)
  275. {
  276.     if (getBrowserState() != BROWSER_READY) {
  277.     XBell(display,0);
  278.     return;
  279.     }
  280.     openBrowserFiles();
  281. }
  282.  
  283. /*    -    -    -    -    -    -    -    -    */
  284.  
  285. /*ARGSUSED*/
  286. static
  287. ACTION_PROC(getAction)
  288. {
  289.     if (getBrowserState() != BROWSER_READY) {
  290.     XBell(display,0);
  291.     return;
  292.     }
  293.     DEBUG0("getAction...\n");
  294.     ftpGetSelectedItems();
  295.     DEBUG0("getAction: done\n");
  296. }
  297.