]> git.donarmstrong.com Git - fastq-tools.git/blobdiff - src/fastq-qualadj.c
Add the offset, not subtract.
[fastq-tools.git] / src / fastq-qualadj.c
index b14e8c9097264a5dea22afcd85f2ffe6eab1760a..488fdade28e41dbba7f887f8fd3680d740656563 100644 (file)
@@ -51,7 +51,7 @@ void fastq_qualadj(FILE* fin, FILE* fout, int offset)
 
     while (fastq_next(fqf, seq)) {
         for (i = 0; i < seq->qual.n; ++i) {
-            c = (int) seq->qual.s[i] - offset;
+            c = (int) seq->qual.s[i] + offset;
             c = c < 0 ? 0 : (c > 126 ? 126: c);
             seq->qual.s[i] = (char) c;
         }
@@ -81,12 +81,40 @@ int main(int argc, char* argv[])
     int opt;
     int opt_idx;
 
+    char* tmp;
+    size_t tmplen;
+
     while (1) {
-        opt = getopt_long(argc, argv, "hV", long_options, &opt_idx);
+        opt = getopt_long(argc, argv, "hV0:1::2::3::4::5::6::7::8::9::", long_options, &opt_idx);
 
         if (opt == -1) break;
 
         switch(opt) {
+
+            /* this is a bit of a hack to prevent getopt from choking on
+             * negative numbers. */
+            case '0':
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+            case '5':
+            case '6':
+            case '7':
+            case '8':
+            case '9':
+                tmplen = 2;
+                if (optarg) tmplen += strlen(optarg);
+                tmp = malloc(tmplen + 1);
+
+                if (optarg) snprintf(tmp, tmplen + 1, "-%c%s", (char) opt, optarg);
+                else        snprintf(tmp, tmplen + 1, "-%c",   (char) opt);
+
+                offset = atoi(tmp);
+                free(tmp);
+                break;
+
+
             case 'h':
                 print_help();
                 return 0;
@@ -103,13 +131,11 @@ int main(int argc, char* argv[])
         }
     }
 
-    if (optind >= argc) {
+    if (offset == 0 && optind >= argc) {
         fprintf(stderr, "An offset must be specified.\n");
         return 1;
     }
-
-    offset = atoi(argv[optind++]);
-
+    else if (offset == 0) offset = atoi(argv[optind++]);
 
     FILE* fin;