From: Pierre L. <pie...@un...> - 2013-01-25 15:45:04
|
Hi all, I've forked samtools and modified the code of bam_tview.c to make it more object oriented in order to be able to use tview as a library. My code is available at: https://github.com/lindenb/samtools see my blog about this implementation: http://plindenbaum.blogspot.fr/2013/01/samtools-tview-as-library-to-display-bam.html I've added a few callbacks to tview_t and moved away everything related to CURSES. The content of (the 'abstract') tview_t is now: ( https://github.com/lindenb/samtools/blob/master/bam_tview.h) typedef struct AbstractTview { (...) /* callbacks */ void (*my_destroy)(struct AbstractTview* ); void (*my_mvprintw)(struct AbstractTview* ,int,int,const char*,...); void (*my_mvaddch)(struct AbstractTview*,int,int,int); void (*my_attron)(struct AbstractTview*,int); void (*my_attroff)(struct AbstractTview*,int); void (*my_clear)(struct AbstractTview*); int (*my_colorpair)(struct AbstractTview*,int); int (*my_drawaln)(struct AbstractTview*,int,int); int (*my_loop)(struct AbstractTview*); int (*my_underline)(struct AbstractTview*); } tview_t; and I've implemented a concrete instance of tview for curses ( https://github.com/lindenb/samtools/blob/master/bam_tview_curses.c ) typedef struct CursesTview { tview_t view; WINDOW *wgoto, *whelp; } curses_tview_t; one for the terminal (option -d t ) $ ./samtools tview -d t sorted.bam -p seq1:23 | head 31 41 51 61 71 81 91 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN TGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGSTGAGG TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG TGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGCGCTGTGGACCCTGC CTGTGGGGGCCGCAGTGGCTGAGG TGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTGAGG TGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGGTGAGG TGTGGTTTAACTCGTCC GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTGAGG TGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG TGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG TTTGTTTTAACTCTTCTCT CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG as well as one for HTLML (option -d H ) $ ./samtools tview -d H sorted.bam -p seq1:23 <html><head><title>seq1:23</title><style type='text/css'>(...) </style></head><body><div class='tviewbody'><div class='tvie wtitle'>seq1:23</div><pre class='tviewpre'><span> 31 41 51 61 71 81 91 </span><br/><span>NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN</span><br/>< span class='tviewcu4'>TGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCT GTGGACCCTGCAGCCTGGCTGTGGGGG</span><span class='tviewcu1'>C</ span><span class='tviewcu4'>CGCAGTGG</span><span class='tvie wcu1'>S</span><span class='tviewcu4'>TG</span><span class='t viewcu3'>A</span><span class='tviewcu4'>GG</span><br/><span class='tviewcu4'>TGTGGTTTAACTC</span><span class='tviewc4'>G TACATGGCCCAGCATTAGGGAGCTGTGGACCCCG</span><span> </span><spa n class='tviewc4'>GCCTGGCTGTGGGGGCACCAGCCGCTGCGG</span><br/> <span class='tviewcu4'>TGTGGTTTAACTC</span><span class='tvie wc4'>GTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG</span><span> </spa n><span class='tviewc4'>GCCTGGCTGTGGGGGCACCAGCCGCTGCGG</span ><br/><span class='tviewcu4'>TGTGGTTTAACTC</span><span class ='tviewc4'>GTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG</span><span> </span><span class='tviewc4'>GCCTGGCTGTGGGGGCACCAGCCGCTGCGG </span><br/><span class='tviewcu4'>TGTGGTTTAACTCG</span><spa would you accept a pull request for my code ? regards, Pierre |