All pastes #760963 Raw Edit

Miscellany

public c v1 · immutable
·published 2007-11-04 14:46 UTC
rendered paste body
#include <stdlib.h>#include <gtk/gtk.h>#include <glib.h>#include <string.h>/*defines*/#define MAX_CARACTERES 3000/*Structures*/typedef struct{    GtkWidget* znlet;    GtkWidget* znseq;    GtkWidget* affres;    GtkWidget* affres2;    GtkWidget* affres3;    GtkWidget* chcom;	}rech;//Prototypesvoid lancerecherche(GtkWidget *widget, gpointer let);int recherche (char t1, char t2, char t3, char tab[], int tabtrouve[],int choix);void afftabtrouve (int tabtrouve[], int nbrtrouve, char *res);void upletters(char tab[]);void affrouge(int tabtrouve[], char sequ[], char res[], int choix);void prepsequ(char *sequ);/*fonction principale*/int main(int argc, char **argv) /*doit avoir ce prototype !*/{    /* Variables GTK*/    rech let;    GtkWidget* MainWindow = NULL;    GtkWidget* lettres3 = NULL;    GtkWidget* btnrech = NULL;    GtkWidget* frame1 = NULL;    GtkWidget* frame2 = NULL;    GtkWidget* seq = NULL;    GtkWidget* MainBox = NULL;    GtkWidget* boxfr1 = NULL;    GtkWidget* boxfr11 = NULL;    GtkWidget* boxfr12 = NULL;    GtkWidget* boxlet = NULL;    GtkWidget* boxseq = NULL;    GtkWidget* boxres = NULL;    GtkWidget* about = NULL;    gchar* convert = NULL;    GtkWidget* com = NULL;    GtkWidget* scrollbar = NULL;    /* Initialisation de GTK+ */    gtk_init(&argc, &argv);    /* Création de la fenêtre */    MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(MainWindow), "delete-event", G_CALLBACK(gtk_main_quit), NULL);    gtk_window_set_title(GTK_WINDOW(MainWindow), "Couane V1.0");    gtk_window_set_default_size(GTK_WINDOW(MainWindow), 800, 600);    gtk_window_set_position(GTK_WINDOW(MainWindow), GTK_WIN_POS_CENTER);    gtk_window_set_resizable (GTK_WINDOW(MainWindow), FALSE);    /*box*/    MainBox=gtk_vbox_new(TRUE, 5); /*hbox pour horizontal*/    boxfr1=gtk_hbox_new(FALSE, 10);    boxlet=gtk_vbox_new(FALSE,5);    boxseq=gtk_vbox_new(FALSE,5);    boxres=gtk_vbox_new(FALSE, 10);    boxfr11=gtk_vbox_new(TRUE,10);    boxfr12=gtk_hbox_new(TRUE,0);    gtk_widget_set_size_request(boxseq, 600, 300);    /*Attributions des paramètres*/    convert = g_locale_to_utf8("\nEntrez 3 lettres à rechercher : ",-1,NULL,NULL,NULL);    lettres3= gtk_label_new (convert);    convert = g_locale_to_utf8("Entrez la séquence :\n(seules les lettres seront considérées)",-1,NULL,NULL,NULL);    seq= gtk_label_new (convert);    convert = g_locale_to_utf8("Programme realisé par Benjamin Monjoie\n(shgun_xzan@hotmail.com)\nsous license GPL\nPlus de renseignement sur :\nwww.xzan.be/couane",-1,NULL,NULL,NULL);    about=gtk_label_new(convert);    convert=g_locale_to_utf8("Pas de résultat pour l'instant",-1,NULL,NULL,NULL);    let.affres = gtk_label_new(convert);    let.affres2=gtk_label_new("");    let.affres3=gtk_label_new("");    btnrech=gtk_button_new_with_label("Rechercher");    let.znseq=gtk_text_view_new();    let.znlet=gtk_entry_new_with_max_length (3);    convert = g_locale_to_utf8("Entrées",-1,NULL,NULL,NULL);    frame1=gtk_frame_new(convert);    frame2=gtk_frame_new("Sorties");    gtk_label_set_justify (GTK_LABEL(about), GTK_JUSTIFY_CENTER);    gtk_label_set_justify (GTK_LABEL(seq), GTK_JUSTIFY_CENTER);    gtk_label_set_justify (GTK_LABEL(let.affres3), GTK_JUSTIFY_CENTER);    convert= g_locale_to_utf8("Choisir le nombre où commencer",-1,NULL,NULL,NULL);    com=gtk_label_new(convert);    g_free(convert);    let.chcom=gtk_combo_box_new_text();    /*ajout dans la liste*/    gtk_combo_box_append_text(GTK_COMBO_BOX(let.chcom),"1");    gtk_combo_box_append_text(GTK_COMBO_BOX(let.chcom),"2");    gtk_combo_box_append_text(GTK_COMBO_BOX(let.chcom),"3");    /*ajout du scrollbar pour affres3*/    scrollbar = gtk_scrolled_window_new(NULL, NULL);    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollbar), boxres);    /*selection du premier*/    gtk_combo_box_set_active(GTK_COMBO_BOX(let.chcom),0);    /*Placement des box*/    gtk_box_pack_start(GTK_BOX(MainBox), frame1, FALSE /*expend*/, TRUE/*fill*/, 5 /*padding*/); /*end pour ajouter de bas en haut*/    gtk_box_pack_start(GTK_BOX(MainBox), frame2, FALSE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxfr1), boxfr11, FALSE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxfr1), boxfr12, FALSE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxfr11), boxlet, TRUE, TRUE, 5);    gtk_box_pack_start(GTK_BOX(boxfr11), about, FALSE, FALSE, 5);    gtk_box_pack_start(GTK_BOX(boxfr12), boxseq, TRUE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxlet), lettres3, FALSE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxlet), let.znlet, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(boxlet), com, FALSE, FALSE, 5);    gtk_box_pack_start(GTK_BOX(boxlet), let.chcom, FALSE, FALSE, 5);    gtk_box_pack_end(GTK_BOX(boxseq), btnrech, FALSE, FALSE, 0);    gtk_box_pack_end(GTK_BOX(boxseq), let.znseq, TRUE, TRUE, 0);    gtk_box_pack_end(GTK_BOX(boxseq), seq, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(boxres), let.affres, TRUE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxres), let.affres2, TRUE, TRUE, 0);    gtk_box_pack_start(GTK_BOX(boxres), let.affres3, TRUE, TRUE, 0);    /*Ajout des containers*/    gtk_container_add (GTK_CONTAINER(frame1), boxfr1);    gtk_container_add (GTK_CONTAINER(MainWindow), MainBox);    gtk_container_add (GTK_CONTAINER(frame2), scrollbar);    /*Appel fonction*/    g_signal_connect(G_OBJECT(btnrech), "clicked", G_CALLBACK(lancerecherche), &let);    /* Affichage et boucle évènementielle */    gtk_widget_show_all(MainWindow);    gtk_main();    /* On quitte.. */    return EXIT_SUCCESS;}void lancerecherche(GtkWidget *btnrech, gpointer data){    char reche[4], *sequ,  cpt_char[255], res[100],t1,t2,t3,outrouv[MAX_CARACTERES/3],res2[MAX_CARACTERES/3]="", *ch, res3[3*MAX_CARACTERES]="";    const char *tmp;    GtkTextBuffer* text_buffer=0;    GtkTextIter start;    GtkTextIter end;    gchar* convert = NULL;    gchar* convert2 = NULL;    gchar* convert3 = NULL;    int choix;    rech *let= (rech *) data;    int cpt, tabtrouve[MAX_CARACTERES/3];    tmp=gtk_entry_get_text(GTK_ENTRY(let->znlet));    strcpy(reche,tmp);    upletters(reche);    /*On recupere le buffer*/    text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(let->znseq));    /*On recupere l'origine du buffer*/    gtk_text_buffer_get_start_iter(text_buffer,&start);    /*On recupere la fin du buffer*/    gtk_text_buffer_get_end_iter(text_buffer,&end);    /*On copie le contenu du buffer dans une variable*/    sequ=gtk_text_buffer_get_text(text_buffer,&start, &end,TRUE);    upletters(sequ);    prepsequ(sequ);    t1=reche[0];    t2=reche[1];    t3=reche[2];    /*transformation de chcom en int*/    ch=gtk_combo_box_get_active_text(GTK_COMBO_BOX(let->chcom));    choix=atoi(ch);    free(ch);    /*Appels des fonctions*/    cpt=recherche (t1,t2,t3,sequ,tabtrouve,choix-1);    if (cpt>0)    {        afftabtrouve (tabtrouve, cpt, outrouv);        affrouge(tabtrouve, sequ, res3, choix-1);    }    else    {        strcpy(res2," ");        strcpy(res3," ");    }    sprintf(cpt_char,"%d",cpt);    /*assemblage de l'affichage du résultat*/    strcpy(res,"Le programme a trouvé ");    strcat(res,reche);    strcat(res," ");    strcat(res,cpt_char);    strcat(res,"x dans la séquence");    convert=g_locale_to_utf8(res,-1,NULL,NULL,NULL);    if (cpt>0)    {        strcpy(res2,"La séquence a été trouvée aux condons suivants : ");        strcat(res2,outrouv);        convert2=g_locale_to_utf8(res2,-1,NULL,NULL,NULL);    }    convert3=g_locale_to_utf8(res3,-1,NULL,NULL,NULL);    /*affichage du résultat*/    gtk_label_set_text(GTK_LABEL(let->affres), convert);    gtk_label_set_text(GTK_LABEL(let->affres2), convert2);    gtk_label_set_markup(GTK_LABEL(let->affres3), convert3);    g_free(convert);    g_free(convert2);    g_free(convert3);}int recherche (char t1, char t2, char t3, char tab[], int tabtrouve[], int choix){    int i=0+choix,j=0,cpt=0;    int s, sf=0;    while ((tab[i-choix]!='\0') && (sf==0))    {        j=0;        s=0;        while ((j<3) && (s==0) && (sf==0))        {            if (((j==0) && (tab[i+j]!=t1)) || ((j==1) && (tab[i+j]!=t2)) || ((j==2) && (tab[i+j]!=t3)))            {                s=1;            }            if (tab[i+j]!='\0')            {                j++;            }            else            {                sf=1;            }        }        if ((s==1) && (tab[i+j]=='\0'))        {            sf=1;        }        if ((s==0) && (sf==0))        {            tabtrouve[cpt]=i+1;            cpt++;        }        if (sf==0)            i+=3;    }    return cpt;}void afftabtrouve (int tabtrouve[], int nbrtrouve, char *res){    int i=1;    char tmp[255];    if (nbrtrouve!=0)    {        sprintf(tmp,"%d",tabtrouve[0]);        strcpy(res,tmp);        while(i<nbrtrouve-1)        {            sprintf(tmp,"%d",tabtrouve[i]);            strcat(res,", ");            strcat(res,tmp);            i++;            if (i%20==0)                strcat(res,"\n");        }        if (i<nbrtrouve)        {            sprintf(tmp,"%d",tabtrouve[i]);            strcat(res, " et ");            strcat(res,tmp);        }    }}void upletters(char tab[]){        int i=0;        while (tab[i]!='\0')        {            tab[i]=toupper(tab[i]);            i++;        }}void affrouge(int tabtrouve[], char sequ[], char *res, int choix){    int i=0,j=0,k, l=0;    char tmp[10];    strcpy(res,"<u>La séquence :</u>\n");    while(i<choix)    {        tmp[i]=sequ[i];        i++;    }    if(i>0)    {        tmp[i]='\0';        strcat(res,tmp);    }    while (sequ[i]!='\0')    {        if (i==tabtrouve[j]-1)        {             strcat(res,"<span foreground=\"#FF0C18\"><b>");             k=0;             l=0;             while ((k<3) && (sequ[i]!='\0'))             {                 if (i%10==0 && i>0)                 {                    tmp[k+l]=' ';                    l++;                 }                 if (i%40==0 && i>0)                 {                    tmp[k+l]='\n';                    l++;                 }                 tmp[k+l]=sequ[i];                 i++;                 k++;             }             tmp[k+l]='\0';             strcat(res,tmp);             strcat(res,"</b></span>");             j++;         }         else         {             k=0;             l=0;             while ((k<3) && (sequ[i]!='\0'))             {                if (i%10==0 && i>0)                {                   tmp[k+l]=' ';                   l++;                }                if (i%40==0 && i>0)                {                   tmp[k+l]='\n';                   l++;                }                tmp[k+l]=sequ[i];                k++;                i++;             }             tmp[k+l]='\0';             strcat(res,tmp);         }    }    strcat(res,"\0");}void prepsequ(char *sequ){    int i=0, j=0;    char sequ2[MAX_CARACTERES];    while (sequ[i]!='\0')    {        if((sequ[i]>='A') && (sequ[i]<='Z'))        {            sequ2[j]=sequ[i];            j++;        }        i++;    }    sequ2[j]='\0';    strcpy(sequ,sequ2);}