]> git.donarmstrong.com Git - samtools.git/blobdiff - bam_tview_curses.c
works with curses
[samtools.git] / bam_tview_curses.c
index 571633c817b1e7a9fd899817c7972269898f5547..7ccf64b6aa027324d4da3f2577179c98e957031d 100644 (file)
@@ -1,9 +1,9 @@
 #include "bam_tview_curses.h"
 
 
+#define FROM_TV(ptr) ((curses_tview_t*)ptr)
 
-
-static void curses_tv_destroy(tview_t* base)
+static void curses_destroy(tview_t* base)
        {
        curses_tview_t* tv=(curses_tview_t*)base;
 
@@ -16,6 +16,55 @@ static void curses_tv_destroy(tview_t* base)
        free(tv);
        }
 
+/*
+ void (*my_mvprintw)(struct AbstractTview* ,int,int,const char*,...);
+    void (*my_)(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);
+*/
+
+static void curses_mvprintw(struct AbstractTview* tv,int y ,int x,const char* fmt,...)
+       {
+       unsigned int size=tv->mcol+2;
+       char* str=malloc(size);
+       va_list argptr;
+       va_start(argptr, fmt);
+       vsnprintf(str,size, fmt, argptr);
+       va_end(argptr);
+       mvprintw(y,x,str);
+       free(str);
+       }
+
+static void curses_mvaddch(struct AbstractTview* tv,int y,int x,int ch)
+       {
+       mvaddch(y,x,ch);
+       }
+       
+static void curses_attron(struct AbstractTview* tv,int flag)
+    {
+    attron(flag);
+    }
+static void curses_attroff(struct AbstractTview* tv,int flag)
+    {
+    attroff(flag);
+    }
+static void curses_clear(struct AbstractTview* tv)
+    {
+    clear();
+    }
+    
+static int curses_colorpair(struct AbstractTview* tv,int flag)
+    {
+    return COLOR_PAIR(flag);
+    }
+
+
+#define SET_CALLBACK(fun) base->my_##fun=curses_##fun;
+
+
+
 curses_tview_t* curses_tv_init(const char *fn, const char *fn_fa, const char *samples)
        {
        curses_tview_t *tv = (curses_tview_t*)calloc(1, sizeof(curses_tview_t));
@@ -28,7 +77,13 @@ curses_tview_t* curses_tv_init(const char *fn, const char *fn_fa, const char *sa
        
        base_tv_init(base,fn,fn_fa,samples);
        /* initialize callbacks */
-       base->destroy=curses_tv_destroy;
+       SET_CALLBACK(destroy);
+       SET_CALLBACK(mvprintw);
+       SET_CALLBACK(mvaddch);
+       SET_CALLBACK(attron);
+       SET_CALLBACK(attroff);
+       SET_CALLBACK(clear);
+       SET_CALLBACK(colorpair);
        
        initscr();
        keypad(stdscr, TRUE);
@@ -228,7 +283,7 @@ int bam_tview_main(int argc, char *argv[])
     }
        tv_draw_aln(tv, tv->curr_tid, tv->left_pos);
        tv_loop(CTV);
-       tv->destroy(tv);
-       free(tv);
+       tv->my_destroy(tv);
+       
        return 0;
 }