]> git.donarmstrong.com Git - samtools.git/blobdiff - bamtk.c
* samtools-0.1.2-22
[samtools.git] / bamtk.c
diff --git a/bamtk.c b/bamtk.c
index dc1805cb73ad8ccc049d66abed05ce05de6bcb26..a9d852d49060732f9f543e936c267ab3f9f3fe5d 100644 (file)
--- a/bamtk.c
+++ b/bamtk.c
@@ -3,7 +3,7 @@
 #include "bam.h"
 
 #ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "0.1.2-11"
+#define PACKAGE_VERSION "0.1.2-22"
 #endif
 
 int bam_taf2baf(int argc, char *argv[]);
@@ -17,7 +17,7 @@ int bam_rmdup(int argc, char *argv[]);
 int bam_flagstat(int argc, char *argv[]);
 
 int faidx_main(int argc, char *argv[]);
-int glf_view_main(int argc, char *argv[]);
+int glf3_view_main(int argc, char *argv[]);
 
 static int view_aux(const bam1_t *b, void *data)
 {
@@ -35,15 +35,17 @@ int bam_view(int argc, char *argv[])
        bamFile fp, fpout = 0;
        bam_header_t *header;
        bam1_t *b;
-       int ret, c, is_bam = 0;
-       while ((c = getopt(argc, argv, "b")) >= 0) {
+       int ret, c, is_bam = 0, is_header = 0, is_headeronly = 0;
+       while ((c = getopt(argc, argv, "bhH")) >= 0) {
                switch (c) {
                case 'b': is_bam = 1; break;
+               case 'h': is_header = 1; break;
+               case 'H': is_headeronly = 1; break;
                default: fprintf(stderr, "Unrecognized option: -%c\n", c); return 1;
                }
        }
        if (argc == optind) {
-               fprintf(stderr, "Usage: samtools view [-b] <in.bam> [<region> [...]]\n");
+               fprintf(stderr, "Usage: samtools view [-bhH] <in.bam> [<region> [...]]\n");
                return 1;
        }
        fp = strcmp(argv[optind], "-")? bam_open(argv[optind], "r") : bam_dopen(fileno(stdin), "r");
@@ -53,6 +55,21 @@ int bam_view(int argc, char *argv[])
                assert(fpout = bam_dopen(fileno(stdout), "w"));
                bam_header_write(fpout, header);
        }
+       if (is_header || is_headeronly) {
+               int i, c;
+               c = header->text[header->l_text-1];
+               header->text[header->l_text-1] = 0;
+               printf("%s", header->text);
+               if (c) putchar(c);
+               header->text[header->l_text-1] = c;
+               for (i = 0; i < header->n_targets; ++i)
+                       printf("@SQ\tSN:%s\tLN:%d\n", header->target_name[i], header->target_len[i]);
+               if (is_headeronly) {
+                       bam_header_destroy(header);
+                       bam_close(fp);
+                       return 0;
+               }
+       }
        if (optind + 1 == argc) {
                b = (bam1_t*)calloc(1, sizeof(bam1_t));
                while ((ret = bam_read1(fp, b)) >= 0) bam_view1(header, b);
@@ -113,7 +130,7 @@ int main(int argc, char *argv[])
        else if (strcmp(argv[1], "faidx") == 0) return faidx_main(argc-1, argv+1);
        else if (strcmp(argv[1], "fixmate") == 0) return bam_mating(argc-1, argv+1);
        else if (strcmp(argv[1], "rmdup") == 0) return bam_rmdup(argc-1, argv+1);
-       else if (strcmp(argv[1], "glfview") == 0) return glf_view_main(argc-1, argv+1);
+       else if (strcmp(argv[1], "glfview") == 0) return glf3_view_main(argc-1, argv+1);
        else if (strcmp(argv[1], "flagstat") == 0) return bam_flagstat(argc-1, argv+1);
 #ifndef _NO_CURSES
        else if (strcmp(argv[1], "tview") == 0) return bam_tview_main(argc-1, argv+1);