*** libwww2/HTFTP.c.orig      Fri Dec 10 01:59:49 1993
--- libwww2/HTFTP.c     Tue Feb  1 21:53:00 1994
***************
*** 54,59 ****
--- 54,61 ----
  #define IPPORT_FTP	21
  #endif
  
+ int HTPassive;            /* set to true to use PASV data ports */
+ 
  #ifdef __STDC__
  #include <stdlib.h>
  #endif
***************
*** 582,587 ****
--- 584,596 ----
    struct sockaddr_in *sin = &soc_address;
    int new_socket;			/* Will be master_socket */
    
+ #ifdef TERM
+   extern int HTUseTerm;
+   if (HTUseTerm) {
+     return HTDoFtpListenTerm(&master_socket,port_command);
+   }
+ #endif /* TERM */
+   
    /* Create internet socket */
    new_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
***************
*** 985,990 ****
--- 994,1038 ----
            return status;
          }
        
+         if (HTPassive) {
+ /*        Tell the server to be passive
+ */
+      int h0, h1, h2, h3;
+            int p0, p1, passive_port;
+      char *p;
+       int reply;          /* PASV reply string */
+ 
+          status = response("PASV\r\n");
+         if (status !=2) {
+          if (status<0) continue;         /* retry or Bad return */
+              return -status;                 /* bad reply */
+            }
+      for(p=response_text; *p; p++)
+              if ((*p<'0')||(*p>'9')) *p = ' ';       /* Keep only digits */
+             status = sscanf(response_text, "%d%d%d%d%d%d%d",
+               &reply, &h0, &h1, &h2, &h3, &p0, &p1);
+         if (status<5) {
+            if (TRACE) fprintf(stderr, "FTP: PASV reply has no inet address!\n");
+          return -99;
+        }
+      passive_port = (p0<<8) + p1;
+           if (TRACE) fprintf(stderr, "FTP: Server is listening on port %d\n",
+                    passive_port);
+ 
+ /*        Open connection for data:
+ */
+      if (TRACE) fprintf(stderr,  
+               "FTP: Data remote address is port %d, inet %d.%d.%d.%d\n",
+                     passive_port,h0,h1,h2,h3);
+         status = HTConnect4p(&data_soc,h0,h1,h2,h3,passive_port);
+      if (status<0) {
+            (void) HTInetStatus("connection for data");
+            return -1;
+         }
+      if (TRACE)
+                 fprintf(stderr, "FTP data connected, socket %d\n", data_soc);
+  } else {
+ 
        status = get_listen_socket();
        if (status < 0)
          {
***************
*** 1027,1032 ****
--- 1075,1083 ----
          if (TRACE)
            fprintf(stderr, "FTP: Port defined.\n");
        }
+ 
+       }        /* HTPassive */
+ 
        status = 0;
        break;	/* No more retries */
      } /* for retries */
***************
*** 1131,1141 ****
--- 1182,1201 ----
        }
    }
    
+   if (!HTPassive)
    /* Wait for the connection */
    {
      struct sockaddr_in soc_address;
  
      int	soc_addrlen = sizeof(soc_address);
+ 
+ #ifdef TERM
+     extern int HTUseTerm;
+     if (HTUseTerm)
+       status = HTDoFtpAccept(&master_socket);
+     else
+ #endif /* TERM */
+ 
  #ifdef SOCKS
      status = Raccept(master_socket,
  #else



*** libwww2/HTTCP.c.orig      Fri Dec 10 01:59:52 1993
--- libwww2/HTTCP.c     Tue Feb  1 21:42:29 1994
***************
*** 315,320 ****
--- 315,328 ----
    struct sockaddr_in *sin = &soc_address;
    int status;
  
+ #ifdef TERM
+   {
+   extern int HTUseTerm;
+   if (HTUseTerm)
+     return HTDoConnectTerm(url,protocol,default_port,s);
+   }
+ #endif
+ 
    /* Set up defaults: */
    sin->sin_family = AF_INET;
    sin->sin_port = htons(default_port);




*** libwww2/Makefile.orig    Tue Feb  1 13:46:47 1994
--- libwww2/Makefile    Tue Feb  1 21:42:30 1994
***************
*** 28,33 ****
--- 28,34 ----
  HTTCP.c \
  HTTP.c \
  HTTelnet.c \
+ HTTerm.c \
  HTWSRC.c \
  HTWriter.c \
  SGML.c \



*** src/gui.c.orig      Sat Dec 11 03:58:59 1993
--- src/gui.c   Tue Feb  1 21:42:30 1994
***************
*** 1910,1915 ****
--- 1910,1942 ----
          use_color = 1;
        if (!strcmp (argv[i], "-nd"))
          no_defaults = 1;
+ #ifdef TERM
+       if (!strcmp (argv[i], "-nopassive")) {
+  extern int HTPassive;
+  extern int HTCanFtpActive;
+     int j;
+         if (!HTCanFtpActive) {
+             fprintf(stderr,"-nopassive not supported (ignored)\n");
+    } else {
+           HTPassive = 0;
+     }
+      for (j=i; i<argc-1; j++)        /* remove -nopassive from arg list */
+          argv[j] = argv[j+1];
+   argc--; i--;
+   continue;
+       }
+       if (!strcmp (argv[i], "-term")) {
+    extern int HTUseTerm;
+  extern int HTPassive;
+  int j;
+         HTPassive = 1;
+         HTUseTerm = 1;
+         for (j=i; j<argc-1; j++)        /* remove -term from arg list */
+               argv[j] = argv[j+1];
+   argc--; i--;
+   continue;
+       }
+ #endif /* TERM */
      }
    
    /* Motif setup. */
