Пример #1
0
int do_site (struct ring *r, struct pdb_ATOM *model)
{
  static int new_site;   /* initialized to 0 by compiler */
  struct pdb_ATOM *s;
  int    i;

  /* actually it is completely brain damaged to have string pointers
     in the pdb struct; one needs the strings to be somewhere between
     fuction calls... anyway, I am using static chars[] for the time being */
  static char RES[]     = "MTH";
  static char EXPOSED[] = "EXPD";
  static char EMPTY[1]  = "";
  char   *segment;

  Cylindrical u;

  /* flag inner wall atoms */
  segment = (r->bExposed) ? EXPOSED : EMPTY;

  for (i = 0, u.phi = 0; i < r->maxsite; i++,  u.phi += r->dphi)
    {
      s = &model[i + new_site]; 
      s->serial     = i + new_site + 1;  /* serial is NOT the offset in the array*/
      s->species    = r->layer->domain->species;
      s->name       = s->species->symbol;
      s->altLoc     = " ";
      s->resName    = RES;
      s->chainID    = " ";
      s->resSeq     = 1;    /* all pore atomes belong to the same res/chain */
      s->iCode      = " ";

      u.rho = r->rho;
      u.z   = r->layer->z;
      s->cpos    = u;
      s->pos     = cyl2cart(u);

      s->occupancy  = 0; /* dont care, dont know... */
      s->tempFactor = 0;
      s->segID      = segment;
      s->element    = " ";
      s->charge     = s->species->charge;
  
      /* GROMACS atoms section */
      /* buffer overflow possible (max length 10): */
      /* sprintf (s->atom, "%s%d", s->species->gmx_name, s->serial); 
         assert (strlen(s->atom) <= 10);
      */
      strncpy (s->atom, s->species->gmx_name, 9);
      s->cgnr = s->serial;     
                       /* all atoms in their own charge group.  Perhaps
			  better to divide it up into domains, but for
			  the time being... 
		       */
      print_site(s);
    };

  return new_site += i;  /* first site of next ring */
}
Пример #2
0
int open_file(char *file) {
    if ((strstr(file,".ovd")!=NULL) || (strstr(file,".odt")!=NULL) )  /* check whether it's a ovd or odt*/
    {
        if (strstr(file,".ovd")!=NULL)			/* ovd*/
        {
            ovd_file = fopen(file,"r");

            if (ovd_file != NULL)
            {
                buffer = (struct fileinfo *)malloc(sizeof(struct fileinfo));
                main_win = subwin(stdscr,LINES-2,COLS,1,0);
                get_file_content(ovd_file, file, buffer);
                fclose(ovd_file);
                cur_char = buffer->content;
                print_site(buffer->cur_line, buffer->lines);
                print_file(buffer,cur_char);
                file_printed = true;
                file_type = 2;
            }
            else
            {
                print_status_bar("File does not exist!");
            }
        }
        else								/* else if odt */
        {
            buffer = (struct fileinfo *)malloc(sizeof(struct fileinfo));
            main_win= subwin(stdscr,LINES-2,COLS,1,0);
            open_odt(file, buffer);
            /*												get_file_meta("/tmp/ooview/meta.xml",buffer);*/
            cur_char = buffer->content;
            print_site(buffer->cur_line, buffer->lines);
            print_file(buffer,cur_char);
            file_printed = true;
            file_type = 1;
        }

    }
    else
    {
        print_status_bar("Must be a OOView-file (ovd) or OpenDocument-file (odt)!");
    }
}
Пример #3
0
int main (int argc, char **argv)
{

    logfilepath = getenv ("HOME");
    logfilepath = strcat (logfilepath, "/.ooview.log");

    load_config();


    initscr();
    raw();
    noecho();
    start_color();
    keypad(stdscr,TRUE);

    init_pair(1, COLOR_WHITE, COLOR_BLACK);
    init_pair(2, COLOR_RED, COLOR_WHITE);
    init_pair(3, COLOR_BLUE, COLOR_WHITE);
    init_pair(4, COLOR_BLACK, COLOR_WHITE);
    bkgd(COLOR_PAIR(1));
    curs_set(0);

    menu_bar = subwin(stdscr,1,COLS,0,0);
    wbkgd(menu_bar,COLOR_PAIR(2));
    waddstr(menu_bar,"File");
    wattron(menu_bar, COLOR_PAIR(3));
    waddstr(menu_bar,"<F1>");
    wattroff(menu_bar, COLOR_PAIR(3));
    wmove(menu_bar, 0, 19);
    waddstr(menu_bar,"View");
    wattron(menu_bar, COLOR_PAIR(3));
    waddstr(menu_bar,"<F2>");
    wattroff(menu_bar, COLOR_PAIR(3));
    wmove(menu_bar, 0, 34);
    waddstr(menu_bar,"Options");
    wattron(menu_bar, COLOR_PAIR(3));
    waddstr(menu_bar,"<F3>");
    wattroff(menu_bar, COLOR_PAIR(3));
    wmove(menu_bar, 0, 53);
    waddstr(menu_bar,"Help");
    wattron(menu_bar, COLOR_PAIR(3));
    waddstr(menu_bar,"<F4>");
    wattroff(menu_bar, COLOR_PAIR(3));

    status_bar = subwin(stdscr,1,COLS,LINES-1,0);
    wbkgd(status_bar,COLOR_PAIR(4));

    n_choices[0] = ARRAY_SIZE(file_choices);
    n_choices[1] = ARRAY_SIZE(view_choices);
    n_choices[2] = ARRAY_SIZE(opts_choices);
    n_choices[3] = ARRAY_SIZE(help_choices);
    file_items = (ITEM **)calloc(n_choices[0] + 1, sizeof(ITEM *));
    view_items = (ITEM **)calloc(n_choices[1] + 1, sizeof(ITEM *));
    opts_items = (ITEM **)calloc(n_choices[2] + 1, sizeof(ITEM *));
    help_items = (ITEM **)calloc(n_choices[3] + 1, sizeof(ITEM *));

    for (i=0; i<n_choices[0]; ++i)
        file_items[i] = new_item(file_choices[i], NULL);

    for (i=0; i<n_choices[1]; ++i)
        view_items[i] = new_item(view_choices[i], NULL);

    for (i=0; i<n_choices[2]; ++i)
        opts_items[i] = new_item(opts_choices[i], NULL);

    for (i=0; i<n_choices[3]; ++i)
        help_items[i] = new_item(help_choices[i], NULL);

    file_items[n_choices[0]] = (ITEM *)NULL;
    view_items[n_choices[1]] = (ITEM *)NULL;
    opts_items[n_choices[2]] = (ITEM *)NULL;
    help_items[n_choices[3]] = (ITEM *)NULL;

    file_menu = new_menu((ITEM **)file_items);
    view_menu = new_menu((ITEM **)view_items);
    opts_menu = new_menu((ITEM **)opts_items);
    help_menu = new_menu((ITEM **)help_items);

    set_menu_mark(file_menu, "");
    set_menu_mark(view_menu, "");
    set_menu_mark(opts_menu, "");
    set_menu_mark(help_menu, "");

    init_screen();
    if (argc == 2)
        open_file(argv[1]);

    while ((c = getch()) != EXIT_KEY)
    {
        action_performed = false;

        switch (c)
        {
        case KEY_F(1):
            cur_menu=1;
            break;
        case KEY_F(2):
            cur_menu=2;
            break;
        case KEY_F(3):
            cur_menu=3;
            break;
        case KEY_F(4):
            cur_menu=4;
            break;
        case KEY_UP:
            if ((file_printed) && (buffer->cur_line > 1))
            {
                int backsteps = 0;
                int steps;
                char *tmp;

                if ((*--cur_char)==NEWLINE)
                    backsteps++;

                tmp = cur_char - 1;

                if ((*--cur_char) == NEWLINE)
                {
                    cur_char = tmp;
                    print_status_bar("yeah");
                }
                else
                {
                    do {
                        cur_char--;
                        backsteps++;
                    } while (((*cur_char)!=NEWLINE) && (cur_char != buffer->content));

                    if (backsteps > COLS)
                    {
                        int test;
                        test = backsteps/COLS;
                        steps = (backsteps%COLS);
                        if (test>1)
                            steps += COLS;

                        mvwprintw(status_bar,0,0,"%d",steps);
                        touchwin(status_bar);
                        wrefresh(status_bar);
                        cur_char += backsteps;
                        cur_char -= steps;
                    }
                }
                buffer->cur_line--;
                print_site(buffer->cur_line, buffer->lines);

                if (cur_char!=buffer->content)
                    print_file(buffer,++cur_char);
                else
                    print_file(buffer,cur_char);
            }
            break;
        case KEY_DOWN:
            if ((file_printed) && (buffer->cur_line < buffer->lines))
            {
                int cols=0;


                while (((*cur_char)!=NEWLINE) && (cols < COLS-1))
                {
                    cols++;
                    cur_char++;
                }


                buffer->cur_line++;
                print_site(buffer->cur_line, buffer->lines);
                print_file(buffer,++cur_char);
            }
            break;
        default:
            if (meta_win!=NULL)
            {
                delwin(meta_win);
                touchwin(stdscr);
                refresh();
            }

        }

        if (cur_menu == 1)
        {
            file_win = newwin(8,19,1,0);
            keypad(file_win,TRUE);
            box(file_win,0,0);
            set_menu_win(file_menu, file_win);
            set_menu_sub(file_menu, derwin(file_win,6,17,1,1));
            post_menu(file_menu);
            while (c = wgetch(file_win))
            {
                if (c == KEY_DOWN)
                    menu_driver(file_menu, REQ_DOWN_ITEM);
                else if (c == KEY_UP)
                    menu_driver(file_menu, REQ_UP_ITEM);
                else if (c == KEY_RIGHT)
                {
                    cur_menu = 2;
                    break;
                }
                else if (c == KEY_LEFT)
                {
                    cur_menu = 4;
                    break;
                }
                else if (c == RETURN)
                {
                    cur_menu = 0;
                    cmd = (char *)item_name(current_item(file_menu));
                    action_performed = true;
                    break;
                }
                else
                {
                    cur_menu = 0;
                    break;
                }

            }

            unpost_menu(file_menu);
            touchwin(stdscr);
            wrefresh(stdscr);
        }
        if (cur_menu == 2)
        {
            view_win = newwin(6,15,1,19);
            keypad(view_win,TRUE);
            box(view_win,0,0);
            set_menu_win(view_menu, view_win);
            set_menu_sub(view_menu, derwin(view_win,4,13,1,1));
            post_menu(view_menu);
            while (c = wgetch(view_win))
            {
                if (c == KEY_DOWN)
                    menu_driver(view_menu, REQ_DOWN_ITEM);
                else if (c == KEY_UP)
                    menu_driver(view_menu, REQ_UP_ITEM);
                else if (c == KEY_RIGHT)
                {
                    cur_menu = 3;
                    break;
                }
                else if (c == KEY_LEFT)
                {
                    cur_menu = 1;
                    break;
                }
                else if (c == RETURN)
                {
                    cur_menu = 0;
                    cmd = (char *)item_name(current_item(view_menu));
                    action_performed = true;
                    break;
                }
                else
                {
                    cur_menu = 0;
                    break;
                }
            }

            unpost_menu(view_menu);
            touchwin(stdscr);
            refresh();
        }
        if (cur_menu == 3)
        {
            opts_win = newwin(5,19,1,34);
            keypad(opts_win,TRUE);
            box(opts_win,0,0);
            set_menu_win(opts_menu, opts_win);
            set_menu_sub(opts_menu, derwin(opts_win,3,17,1,1));
            post_menu(opts_menu);
            while (c = wgetch(opts_win))
            {
                if (c == KEY_DOWN)
                    menu_driver(opts_menu, REQ_DOWN_ITEM);
                else if (c == KEY_UP)
                    menu_driver(opts_menu, REQ_UP_ITEM);
                else if (c == KEY_RIGHT)
                {
                    cur_menu = 4;
                    break;
                }
                else if (c == KEY_LEFT)
                {
                    cur_menu = 2;
                    break;
                }
                else if (c == RETURN)
                {
                    cur_menu = 0;
                    cmd = (char *)item_name(current_item(opts_menu));
                    action_performed = true;
                    break;
                }
                else
                {
                    cur_menu = 0;
                    break;
                }
            }

            unpost_menu(opts_menu);
            touchwin(stdscr);
            refresh();
        }
        if (cur_menu == 4)
        {
            help_win = newwin(6,17,1,53);
            keypad(help_win,TRUE);
            box(help_win,0,0);
            set_menu_win(help_menu, help_win);
            set_menu_sub(help_menu, derwin(help_win,4,15,1,1));
            post_menu(help_menu);
            while (c = wgetch(help_win))
            {
                if (c == KEY_DOWN)
                    menu_driver(help_menu, REQ_DOWN_ITEM);
                else if (c == KEY_UP)
                    menu_driver(help_menu, REQ_UP_ITEM);
                else if (c == KEY_RIGHT)
                {
                    cur_menu = 1;
                    break;
                }
                else if (c == KEY_LEFT)
                {
                    cur_menu = 3;
                    break;
                }
                else if (c == RETURN)
                {
                    cur_menu = 0;
                    cmd = (char *)item_name(current_item(help_menu));
                    action_performed = true;
                    break;
                }
                else
                {
                    cur_menu = 0;
                    break;
                }
            }

            unpost_menu(help_menu);
            touchwin(stdscr);
            refresh();
        }




        if (action_performed)
        {
            char file[80];
            clear_status_bar();

            if (!strcmp(cmd,"Open"))
            {
                if (file_printed==false)
                {
                    print_status_bar("Enter a file: ");
                    curs_set(1);
                    echo();
                    wscanw(status_bar,"%s",file);			/* get filename from user */
                    curs_set(0);
                    noecho();
                    open_file(file);


                }
                else
                {
                    print_status_bar("Please close current file.");
                }

            }
            if (!strcmp(cmd,"Close"))
            {
                if (file_printed)
                {
                    free(buffer);


                    werase(main_win);
                    init_screen();
                    wrefresh(main_win);
                    file_printed = false;
                    system("rm -rf /tmp/ooview");


                }
                else
                {
                    print_status_bar("No open file!");
                }
            }
            if (!strcmp(cmd,"Reload"))
            {
                if (file_printed)
                {
                    if (strstr(file,".ovd")!=NULL)			/* ovd*/
                    {
                        ovd_file = fopen(file,"r");

                        if (ovd_file != NULL)
                        {
                            free(buffer);
                            buffer = (struct fileinfo *)malloc(sizeof(struct fileinfo));
                            main_win = subwin(stdscr,LINES-2,COLS,1,0);
                            get_file_content(ovd_file, file, buffer);
                            fclose(ovd_file);
                            cur_char = buffer->content;
                            print_site(buffer->cur_line, buffer->lines);
                            print_file(buffer,cur_char);
                            file_printed = true;
                        }
                        else
                        {
                            print_status_bar("File does not exist!");
                        }
                    }
                    else								/* else if odt */
                    {
                        free(buffer);
                        buffer = (struct fileinfo *)malloc(sizeof(struct fileinfo));
                        main_win= subwin(stdscr,LINES-2,COLS,1,0);
                        open_odt(file,buffer);
                        get_file_meta("/tmp/ooview/meta.xml",buffer);
                        cur_char = buffer->content;
                        print_site(buffer->cur_line, buffer->lines);
                        print_file(buffer,cur_char);
                        file_printed = true;
                    }


                }
                else
                {
                    print_status_bar("No open file!");
                }
            }

            if (!strcmp(cmd,"Document info"))
            {
                if (file_printed)
                {
                    if (file_type==1)
                    {

                        meta_win = newwin(9,COLS-2,(LINES/2)-5,1);
                        wbkgd(meta_win,COLOR_PAIR(4));


                        mvwprintw(meta_win,1,1,"Genarator:  %s", buffer->generator);
                        mvwprintw(meta_win,2,1,"Initial creator:\t%s", buffer->initial_creator);
                        mvwprintw(meta_win,3,1,"Creation date:\t\t%s", buffer->creation_date);
                        mvwprintw(meta_win,4,1,"Creator:\t\t%s", buffer->creator);
                        mvwprintw(meta_win,5,1,"Date:\t\t\t%s", buffer->date);
                        mvwprintw(meta_win,6,1,"Editing cycles:\t%s", buffer->editing_cycles);
                        mvwprintw(meta_win,7,1,"Editing duration:\t%s", buffer->editing_duration);

                        box(meta_win,0,0);
                        wrefresh(meta_win);
                        touchwin(meta_win);

                    }
                }
                else
                {
                    print_status_bar("No open file!");
                }
            }

            if (!strcmp(cmd,"OOView homepage"))
            {
                char *syscall;
                syscall=(char *)malloc(strlen(BROWSER)+strlen(HOMEPAGE_URL)+1);


                sprintf(syscall, "%s %s", BROWSER, HOMEPAGE_URL);
                system(syscall);
                free(syscall);
                if (file_printed)
                    free(buffer);
                end_curses();
                return(0);

            }

            if (!strcmp(cmd,"Documentation"))
            {
                char *syscall;
                syscall=(char *)malloc(strlen(BROWSER)+strlen(HOMEPAGE_URL)+1);


                sprintf(syscall, "%s %s", BROWSER, HOMEPAGE_URL);
                system(syscall);
                free(syscall);
                if (file_printed)
                    free(buffer);
                end_curses();
                return(0);

            }

            if (!strcmp(cmd, "About OOView"))
                print_status_bar("OOView. Visit Homepage for details");

            if (!strcmp(cmd, "Copying"))
                print_status_bar("OOView is under GPL/2 Visit Homepage for details");

            if (!strcmp(cmd, "Find")) {

                if (file_printed) {

                    print_status_bar("Enter string to find: ");
                    char *findit;

                    curs_set(1);
                    echo();

                    wscanw(status_bar,"%s",findit);

                    /*

                    how to find a string in a string?
                    find it -> set cursor to position

                    */

                    print_status_bar("Not implemented yet :(");
                    curs_set(0);
                    noecho();
                } else {
                    print_status_bar("No open file!");
                }
            }

            if (!strcmp(cmd, "External Programs")) {
                char *prompt;

                /*getting printer command*/
                prompt = (char *)malloc((strlen("Enter Printing Command []: ")+strlen(PRINTER)));
                sprintf(prompt,"Enter Printing Command [%s]: ",PRINTER);
                print_status_bar(prompt);
                free(prompt);

                curs_set(1);
                echo();
                char *newcmd;
                wscanw(status_bar,"%s",newcmd);
                curs_set(0);
                noecho();
                print_status_bar(newcmd);
                /* / getting printer command*/

            }

            if (!strcmp(cmd,"Exit"))
            {
                if (file_printed)
                    free(buffer);
                end_curses();
                return 0;
            }
        }

    }
    if (file_printed)
        free(buffer);

    end_curses();
    return 0;
}