Index: tools/vchvtest/HV.cc
===================================================================
--- tools/vchvtest/HV.cc	(revision 201)
+++ tools/vchvtest/HV.cc	(revision 202)
@@ -144,13 +144,4 @@
 	}
   }
-
-//   if (ret == 3) {
-//     printf("  *** Board %d ***   Current: %d\n"
-//     	   "Overcurrent bit: %s    Wrap counter: %d   Reset bit: %s   Status: %s\n",
-// 	   rbuf[2]&0xf, rbuf[1]+(rbuf[0]&15)*256,
-// 	   rbuf[0]&128 ? "set":"clear", (rbuf[0]>>4)&7,
-//            (rbuf[2]&128)==0 ? "clear": "set",
-// 	   (rbuf[2]&0x70)==0x70 ? "No response": "OK");
-//   }
   
   return 1;
Index: tools/vchvtest/vchvtest.cc
===================================================================
--- tools/vchvtest/vchvtest.cc	(revision 201)
+++ tools/vchvtest/vchvtest.cc	(revision 202)
@@ -8,4 +8,7 @@
 
 #include <stdio.h>
+#include <termios.h>
+#include <unistd.h>
+
 #include <ctype.h>
 #include <sys/time.h>
@@ -27,5 +30,5 @@
 int LastCrate;
 bool Repeat = false;
-bool Verbose = true;
+bool Verbose;
 
 // Function prototypes
@@ -73,7 +76,11 @@
 
   char Prompt[MAX_COM_SIZE], *Command = NULL;
+  struct termios Termios, Termios_orig;
 
   printf("\n*** vchvtest (built %s, %s; O. Grimm) ***\n\n",__DATE__,__TIME__);
-  if (argc == 1) printf("Note: Use FTDI serial numbers as arguments to connect\n");
+  if (argc == 1) {
+    printf("Note: Use FTDI serial numbers as arguments to connect\n");
+  }
+	
 
   // Initialize status variables
@@ -90,4 +97,12 @@
   }
   LastCrate = NumCrates-1;
+
+  // Set terminal to read single chars
+  if (tcgetattr (1, &Termios_orig) == -1) {
+    printf("Error with tcgetattr() (%s)\n", strerror(errno));
+    exit(EXIT_FAILURE);
+  }
+  Termios = Termios_orig;
+  Termios.c_lflag &= ~(ICANON | ECHO);
 
   // Command loop
@@ -109,5 +124,14 @@
     else continue;
     
-    // Process command     
+	// Set terminal to return single chars
+	if (tcsetattr (1, 0, &Termios) == -1) {
+      printf("Error with tcsetattr() (%s)\n", strerror(errno));
+      exit(EXIT_FAILURE);
+    }
+
+	// Defualt is verbose response
+	Verbose = true;
+
+    // Process command
     for(int i=0; i<MAX_NUM_TOKEN; i++) Param[i] = "";  // All pointers point initially to empty string
     NParam = ParseInput(Command, Param);
@@ -115,18 +139,26 @@
     bool Found=false;
     int N;
-    for(unsigned int CmdNumber=0; CmdNumber<sizeof(CommandList)/sizeof(CL_Struct); CmdNumber++)
+    for(unsigned int CmdNumber=0; CmdNumber<sizeof(CommandList)/sizeof(CL_Struct); CmdNumber++) {
       if (Match(Param[0], CommandList[CmdNumber].Name)) {
         if(NParam-1 < CommandList[CmdNumber].MinNumParameter) {
     	  printf("Usage: %s %s\n", CommandList[CmdNumber].Name, CommandList[CmdNumber].Parameters);
-	}
-        else do {
-	  (*CommandList[CmdNumber].CommandPointer)();
-	  ioctl(STDIN_FILENO, FIONREAD, &N);
-	} while(CommandList[CmdNumber].Repeatable && Repeat && N==0);
+	    }
+		else do {
+		  (*CommandList[CmdNumber].CommandPointer)();
+		  ioctl(STDIN_FILENO, FIONREAD, &N);
+		} while(CommandList[CmdNumber].Repeatable && Repeat && N==0);
         Found = true;
-	break;
+		break;
       }
+	} // for()
+	
     if (!Found) printf("Unknown command '%s'\n",Param[0]);
-  } // while{}
+	
+	// Set terminal back to line buffering
+	if (tcsetattr (1, 0, &Termios_orig) == -1) {
+      printf("Error with tcsetattr() (%s)\n", strerror(errno));
+      exit(EXIT_FAILURE);
+    }
+  } // while()
 }
 
@@ -226,6 +258,9 @@
 void cmd_test() {
 
-  for (int i=FirstCrate; i<=LastCrate; i++) {
-    printf("Testing board %d  (Enter to continue, any key plus enter to stop)\n", fHVBoard[i]->BoardNumber);
+  Verbose = false;
+
+  // Loop over crates
+  for (int i=FirstCrate; i<=LastCrate; i++) {
+    printf("Testing board %d  (q to stop, any other key to continue)\n", fHVBoard[i]->BoardNumber);
     if (fHVBoard[i]->GlobalSet(0) != 1) {
       printf("Error: Could not global set board to zero\n");
@@ -234,13 +269,12 @@
 
 	for (int k=0; k<MAX_NUM_BOARDS; k++) for (int j=0; j<NUM_CHANNELS; j++) {
-	  printf("\rBoard %d, channel %d", k, j);
-	  fflush(stdout);
-	  Verbose = false;
+	  printf("Board %d, channel %d\n", k, j);
+
 	  if (fHVBoard[i]->ChannelSet(k, j, atoi(Param[1])) != 1) {
-        printf("Error setting voltage\n");
+        printf("  Error setting voltage\n");
 		return;
 	  }
-	  Verbose = true;
-	  if (getchar() != '\n') return; 
+	  
+	  if (getchar() == 'q') return; 
 	}
   } 
@@ -270,9 +304,8 @@
 
   if (N < 1) return;
+  Verbose = false;
 
   gettimeofday(&Start, NULL);
-  Verbose = false;
   for (int i=0; i<=N; i++) fHVBoard[0]->ReadChannel(0, 0);
-  Verbose = true;
   gettimeofday(&End, NULL);
 
@@ -286,5 +319,5 @@
   if (Match(Param[1],"on")) Repeat = true;
   else Repeat = false;
-  printf("Auto command repeat is %s\n", Repeat ? "on (CTRL-c to switch off)" : "off");
+  printf("Auto command repeat is %s\n", Repeat ? "on (Hit return while repeating to stop)" : "off");
 } 
 
@@ -294,7 +327,8 @@
   int Board;
 
+  Verbose = false;
+
   if (NParam==2 && ConvertToInt(Param[1], &Board)) {
 	for (int i=FirstCrate; i<=LastCrate; i++) {
-	  Verbose = false;
 	  for (int j=0; j<NUM_CHANNELS; j++) {
 		if (j%4 == 0) printf("\nChannel %2d  ", j);
@@ -304,5 +338,4 @@
       }    
 	printf("\n");  
-	Verbose = true;
 	}
   } else {
@@ -332,6 +365,4 @@
     }    
   }
-  
-  Verbose = true;
 } 
 
