home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lynx2.8.1dev.10.tar.gz / lynx2.8.1dev.10.tar / lynx2-8 / src / LYExtern.c < prev    next >
C/C++ Source or Header  |  1998-04-23  |  2KB  |  98 lines

  1. /*
  2.  External application support.
  3.  This feature allows lynx to pass a given URL to an external program.
  4.  It was written for three reasons.
  5.  1) To overcome the deficiency    of Lynx_386 not supporting ftp and news.
  6.     External programs can be used instead by passing the URL.
  7.  
  8.  2) To allow for background transfers in multitasking systems.
  9.     I use wget for http and ftp transfers via the external command.
  10.  
  11.  3) To allow for new URLs to be used through lynx.
  12.     URLs can be made up such as mymail: to spawn desired applications
  13.     via the external command.
  14.  
  15.  See lynx.cfg for other info.
  16. */
  17.  
  18. #include <tcp.h>
  19. #include <LYGlobalDefs.h>
  20. #include <LYUtils.h>
  21. #include <LYExtern.h>
  22. #include <LYCurses.h>
  23.  
  24. #include <LYLeaks.h>
  25.  
  26. #ifdef USE_EXTERNALS
  27. #define FREE(x) if (x) {free(x); x = NULL;}
  28.  
  29. void run_external ARGS1(char *, c)
  30. {
  31.     char command[1024];
  32.     lynx_html_item_type *externals2=0;
  33.  
  34.     if (externals == NULL) return;
  35.  
  36.     for(externals2=externals; externals2 != NULL;
  37.          externals2=externals2->next)
  38.     {
  39.  
  40. #ifdef _WINDOWS
  41.      if (!strnicmp(externals2->name,c,strlen(externals2->name)))
  42. #else
  43.      if (!strncasecomp(externals2->name,c,strlen(externals2->name)))
  44. #endif
  45.      {
  46.          char *cp;
  47.  
  48.         if(no_externals && !externals2->always_enabled)
  49.         {
  50.           statusline(EXTERNALS_DISABLED);
  51.           sleep(MessageSecs);
  52.           return;
  53.         }
  54.  
  55.         /*  Too dangerous to leave any URL that may come along unquoted.
  56.          *  They often contain '&', ';', and '?' chars, and who knows
  57.          *  what else may occur.
  58.          *  Prevent spoofing of the shell.
  59.          *  Dunno how this needs to be modified for VMS or DOS. - kw
  60.          */
  61. #if defined(VMS) || defined(DOSPATH) || defined(__EMX__)
  62.         sprintf(command, externals2->command, c);
  63. #else /* Unix or DOS/Win: */
  64.         cp = quote_pathname(c);
  65.         sprintf(command, externals2->command, cp);
  66.         FREE(cp);
  67. #endif /* VMS */
  68.  
  69.         if (*command != '\0')
  70.         {
  71.  
  72.          statusline(command);
  73.          sleep(MessageSecs);
  74.  
  75.          stop_curses();
  76.          fflush(stdout);
  77. #ifdef __DJGPP__
  78.         __djgpp_set_ctrl_c(0);
  79.         _go32_want_ctrl_break(1);
  80. #endif /* __DJGPP__ */
  81.          system(command);
  82. #ifdef __DJGPP__
  83.         __djgpp_set_ctrl_c(1);
  84.         _go32_want_ctrl_break(0);
  85. #endif /* __DJGPP__ */
  86.  
  87.          fflush(stdout);
  88.          start_curses();
  89.         }
  90.  
  91.         return;
  92.      }
  93.     }
  94.  
  95.     return;
  96. }
  97. #endif /* USE_EXTERNALS */
  98.