Improve the feedback to the user and make a better implementation of
the usage explanations.--- a/src/LutefiskMain.c
+++ b/src/LutefiskMain.c
@@ -81,6 +81,27 @@
 
 char versionString[256] = "LutefiskXP v1.0.7\nCopyright 1996-1906 Richard S. Johnson\n\n";       
 
+
+static void usage(void)
+{
+  /* print usage */
+  puts("\nUSAGE:  lutefisk [options] [CID file pathname]\n");
+  puts(  " The following options are available:\n");
+  puts(  "                -o = output file pathname");
+  puts(  "                -q = quiet mode ON (default OFF)");
+  puts(  "                -m = precursor ion mass");
+  puts(  "                -d = details file pathname");
+  puts(  "                     Default: /usr/share/lutefisk/Lutefisk.details");
+  puts(  "                -p = params file pathname");
+  puts(  "                -r = residues file pathname");
+  puts(  "                     Default: /usr/share/lutefisk/Lutefisk.residues");
+  puts(  "                -s = pathnane of file with database sequences to score");
+  puts(  "                -v = verbose mode ON (default OFF)");
+  puts(  "                -h = print this help text");
+  puts(  "" );
+  puts("\n");
+}
+
 /*
 //--------------------------------------------------------------------------------
 //  main()
@@ -604,82 +625,94 @@
 
     strcpy(gParam.outputFile,"");
 
-    strcpy(gParam.detailsFilename,"Lutefisk.details");
-
-    strcpy(gParam.residuesFilename,"Lutefisk.residues");
+    strcpy(gParam.detailsFilename,"/usr/share/lutefisk/Lutefisk.details");
+    strcpy(gParam.residuesFilename,"/usr/share/lutefisk/Lutefisk.residues");
 
 
+     /* get command-line parameters */
+ 
+    if (argc < 2)
+      {
+	usage();
+	exit(1);
+      }
 
-    /* get command-line parameters */
-
-    while ((c = getopt(argc, argv, "?hqvd:o:m:p:r:s:")) != -1)
-    {
+     while ((c = getopt(argc, argv, "?hqvd:o:m:p:r:s:")) != -1)
+      {
 
         switch (c)
-        {
+	  {
         
-        case 'o':
+	  case 'o':
             /* output file name */
-            strncpy(gParam.outputFile, optarg, sizeof(gParam.outputFile));
-            break;
+	    if (memccpy(gParam.outputFile, optarg, '\x0', sizeof(gParam.outputFile)) == NULL)
+	      {
+		fprintf(stderr, "Argument filename max length = %d caracters", sizeof(gParam.outputFile) - 1 );
+		exit(1);
+	      }
+	    break;
 
-        case 'd':
+	  case 'd':
             /* details file name */
-            strncpy(gParam.detailsFilename, optarg, sizeof(gParam.detailsFilename));
+	    if (memccpy(gParam.detailsFilename, optarg, '\x0', sizeof(gParam.detailsFilename)) == NULL)
+	      {
+		fprintf(stderr, "Argument filename max length = %d caracters", sizeof(gParam.detailsFilename) - 1 );
+		exit(1);
+	      }
             break;  
 
-        case 'm':
+	  case 'm':
             /* peptide MW */
             gParam.peptideMW = atof(optarg);
             break;
 
-        case 'p':
+	  case 'p':
             /* param file name */
-            strncpy(gParam.paramFile, optarg, sizeof(gParam.paramFile));
+	    if (memccpy(gParam.paramFile, optarg, '\x0', sizeof(gParam.paramFile)) == NULL)
+	      {
+		fprintf(stderr, "Argument filename max length = %d caracters", sizeof(gParam.paramFile) - 1 );
+		exit(1);
+	      }
             break;
 
-        case 'q':
+	  case 'q':
             /* QUIET! */
             gParam.fMonitor = FALSE;
             gParam.fVerbose = FALSE;
             break;
 
-        case 'r':
-            /* residues file name */
-            strncpy(gParam.residuesFilename, optarg, sizeof(gParam.residuesFilename));
-            break;  
-
-        case 's':
-            /* database sequences file */
-            strncpy(gParam.databaseSequences, optarg, sizeof(gParam.databaseSequences));
-            break;
-
-        case 'v':
+	  case 'r':
+	    /* residues file name */
+	    if (memccpy(gParam.residuesFilename, optarg, '\x0', sizeof(gParam.residuesFilename)) == NULL)
+	      {
+		fprintf(stderr, "Argument filename max length = %d caracters", sizeof(gParam.residuesFilename) - 1 );
+		exit(1);
+	      }
+	    break;  
+	  
+	  case 's':
+	    /* database sequences file */
+	    if (memccpy(gParam.databaseSequences, optarg, '\x0', sizeof(gParam.databaseSequences)) == NULL)
+	      {
+		fprintf(stderr, "Argument filename max length = %d caracters", sizeof(gParam.databaseSequences) - 1 );
+		exit(1);
+	      }
+	    break;
+	  
+	  case 'v':
             /* verbose */
             gParam.fVerbose = TRUE;
             break;
 
-        case '?':
-        case 'h':
-            /* print usage */
-            puts("\nUSAGE:  lutefisk [options] [CID file pathname]\n");
-            puts(  "                -o = output file pathname");
-            puts(  "                -q = quiet mode ON (default OFF)");
-            puts(  "                -m = precursor ion mass");
-            puts(  "                -d = details file pathname");
-            puts(  "                -p = params file pathname");
-            puts(  "                -r = residues file pathname");
-            puts(  "                -s = pathnane of file with database sequences to score");
-            puts(  "                -v = verbose mode ON (default OFF)");
-            puts(  "                -h = print this help text");
-            puts(  "" );
-            puts("\n");
-            exit(1);
-
-            break;
-        }
-    }
-
+	  case '?':
+	  case 'h':
+	    /* print usage */
+	    usage();
+	    exit(1);
+	  
+	    break;
+	  }
+      }
 
     /* report flag state */
 
