$NetBSD$

--- cu.c.orig	2003-05-29 02:08:45.000000000 -0400
+++ cu.c
@@ -258,6 +258,8 @@ main (argc, argv)
   enum txonxoffsetting txonxoff = XONXOFF_ON;
   /* -I: configuration file name.  */
   const char *zconfig = NULL;
+  /* -F/-f: Hard/Soft flow control.  */
+  boolean hflow = TRUE;
   int iopt;
   pointer puuconf;
   int iuuconf;
@@ -295,7 +297,7 @@ main (argc, argv)
 	}
     }
 
-  while ((iopt = getopt_long (argc, argv, "a:c:deE:hnI:l:op:s:tvx:z:",
+  while ((iopt = getopt_long (argc, argv, "a:c:deE:fFhnI:l:op:qs:tvx:z:",
 			      asCulongopts, (int *) NULL)) != EOF)
     {
       switch (iopt)
@@ -322,6 +324,16 @@ main (argc, argv)
 	  zCuvar_escape = optarg;
 	  break;
 
+	case 'f':
+	  /* No h/w flow control.  */
+	  hflow = FALSE;
+	  break;
+
+	case 'F':
+	  /* Use h/w flow control.  */
+	  hflow = TRUE;
+	  break;
+
 	case 'h':
 	  /* Local echo.  */
 	  fCulocalecho = TRUE;
@@ -348,6 +360,11 @@ main (argc, argv)
 	  zport = optarg;
 	  break;
 
+	case 'q':
+	  /* Quiet file transfers */
+	  fCuvar_verbose = FALSE;
+	  break;
+
 	case 's':
 	  /* Speed.  */
 	  ibaud = strtol (optarg, (char **) NULL, 10);
@@ -599,6 +616,8 @@ main (argc, argv)
 	      sport.uuconf_palloc = NULL;
 	      sport.uuconf_u.uuconf_sdirect.uuconf_zdevice = NULL;
 	      sport.uuconf_u.uuconf_sdirect.uuconf_ibaud = ibaud;
+	      sport.uuconf_u.uuconf_sdirect.uuconf_fcarrier = FALSE;
+	      sport.uuconf_u.uuconf_sdirect.uuconf_fhardflow = hflow;
 
 	      if (! fconn_init (&sport, &sconn, UUCONF_PORTTYPE_UNKNOWN))
 		ucuabort ();
@@ -842,11 +861,14 @@ ucuhelp ()
   printf (" -e: Set even parity\n");
   printf (" -o: Set odd parity\n");
   printf (" --parity={odd,even}: Set parity\n");
+  printf (" -f: Use hardware flow control\n");
+  printf (" -F: Turn off hardware flow control (default)\n");
   printf (" -E,--escape char: Set escape character\n");
   printf (" -h,--halfduplex: Echo locally\n");
   printf (" --nostop: Turn off XON/XOFF handling\n");
   printf (" -t,--mapcr: Map carriage return to carriage return/linefeed\n");
   printf (" -n,--prompt: Prompt for phone number\n");
+  printf (" -q: Be quiet during file transfers\n");
   printf (" -d: Set maximum debugging level\n");
   printf (" -x,--debug debug: Set debugging type\n");
 #if HAVE_TAYLOR_CONFIG
@@ -1013,7 +1035,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
   switch (bcmd)
     {
     default:
-      if (! isprint (*zCuvar_escape))
+      if (! isprint (BUCHAR (*zCuvar_escape)))
 	sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
       else
 	{
@@ -1111,7 +1133,7 @@ fcudo_cmd (puuconf, qconn, bcmd)
       return TRUE;
 
     case '?':
-      if (! isprint (*zCuvar_escape))
+      if (! isprint (BUCHAR (*zCuvar_escape)))
 	sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
       else
 	{
@@ -1248,7 +1270,7 @@ icuunrecogvar (puuconf, argc, argv, pvar
 {
   char abescape[5];
 
-  if (! isprint (*zCuvar_escape))
+  if (! isprint (BUCHAR (*zCuvar_escape)))
     sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
   else
     {
@@ -1302,7 +1324,7 @@ uculist_vars ()
 	      {
 		int cchar;
 
-		if (! isprint (*z))
+		if (! isprint (BUCHAR (*z)))
 		  {
 		    sprintf (abchar, "\\%03o", BUCHAR (*z));
 		    cchar = 4;
@@ -1415,7 +1437,7 @@ icuunrecogfn (puuconf, argc, argv, pvar,
 {
   char abescape[5];
 
-  if (! isprint (*zCuvar_escape))
+  if (! isprint (BUCHAR (*zCuvar_escape)))
     sprintf (abescape, "\\%03o", BUCHAR (*zCuvar_escape));
   else
     {
@@ -2049,7 +2071,7 @@ fcusend_buf (qconn, zbufarg, cbufarg)
       fnl = FALSE;
       for (i = 0, zget = zbuf; i < csend; i++, zget++)
 	{
-	  if (isprint (*zget)
+	  if (isprint (BUCHAR (*zget))
 	      || *zget == '\t')
 	    *zput++ = *zget;
 	  else if (*zget == '\n')
@@ -2082,8 +2104,10 @@ fcusend_buf (qconn, zbufarg, cbufarg)
 	 mode.  Echo checking of a newline is different from checking
 	 of normal characters; when we send a newline we look for
 	 *zCuvar_echonl.  */
+      /* Don't check for newlines unless "echocheck" is on or "binary mode"
+	 is off.  From NetBSD PR bin/6834 by Frederick Bruckman. */
       if ((fCuvar_echocheck && ! fCuvar_binary)
-	  || (fnl && *zCuvar_echonl != '\0'))
+	  && (fnl && *zCuvar_echonl != '\0'))
 	{
 	  long iend;
 
@@ -2101,7 +2125,7 @@ fcusend_buf (qconn, zbufarg, cbufarg)
 		}
 	      else
 		{
-		  if (! fCuvar_echocheck || ! isprint (*zget))
+		  if (! fCuvar_echocheck || ! isprint (BUCHAR (*zget)))
 		    continue;
 		  bwant = *zget;
 		}
