/* ToDo make sure position of vlen and klen are at the right place */
fint F77_FUNC(ipaddstroption,IPADDSTROPTION)
(fptr* FProblem,
 char* KEYWORD,
 char* VALUE,
 int klen,
 int vlen)
{
  char* keyword;
  char* val;
  FUserData* fuser_data = (FUserData*) *FProblem;
  fint retval;

  keyword = f2cstr(KEYWORD, klen);
  val = f2cstr(VALUE, vlen);

  retval = AddIpoptStrOption(fuser_data->Problem, keyword, val);

  free(val);
  free(keyword);

  if (retval) {
    return OKRetVal;
  }
  else {
    return NotOKRetVal;
  }
}
fint F77_FUNC(ipaddnumoption,IPADDNUMOPTION)
(fptr* FProblem,
 char* KEYWORD,
 fdouble* VALUE,
 int klen)
{
  char* keyword;
  FUserData* fuser_data = (FUserData*) *FProblem;
  fint retval;

  keyword = f2cstr(KEYWORD, klen);

  retval = AddIpoptNumOption(fuser_data->Problem, keyword, *VALUE);

  free(keyword);

  if (retval) {
    return OKRetVal;
  }
  else {
    return NotOKRetVal;
  }
}
fint F77_FUNC(ipopenoutputfile,IPOPENOUTPUTFILE)
(fptr* FProblem,
 char* FILENAME,
 fint* PRINTLEVEL,
 int flen)
{
  char* filename;
  FUserData* fuser_data = (FUserData*) *FProblem;
  Int printlevel = *PRINTLEVEL;
  fint retval;

  filename = f2cstr(FILENAME, flen);

  retval = OpenIpoptOutputFile(fuser_data->Problem, filename, printlevel);

  free(filename);

  if (retval) {
    return OKRetVal;
  }
  else {
    return NotOKRetVal;
  }
}
fint F77_FUNC(ipaddintoption,IPADDINTOPTION)
(fptr* FProblem,
 char* KEYWORD,
 fint* VALUE,
 int klen)
{
  char* keyword;
  FUserData* fuser_data = (FUserData*) *FProblem;
  Int value = *VALUE;
  fint retval;

  keyword = f2cstr(KEYWORD, klen);

  retval = AddIpoptIntOption(fuser_data->Problem, keyword, value);

  free(keyword);

  if (retval) {
    return OKRetVal;
  }
  else {
    return NotOKRetVal;
  }
}
Exemplo n.º 5
0
List *xdap_late_read_gel_data(void)
{
    List *gel_details;

    if (cur_gel_index > io.num_gels)
        gel_details = nil;
    else {
        bap_ar_file_rec ar_line;
        bap_rl_file_rec rl_line;
        bap_sq_file_rec sq_line;
        bap_tg_file_rec tg_line;

        int index;
        char name[17];
        char *seq;
        int length;
        int comp;
        int pos;
        int l_nbr;
        int r_nbr;

        sq_line = (char *) malloc(io.max_gel_length+1);

        bap_read_ar(&io,cur_gel_index,&ar_line);
        bap_read_rl(&io,cur_gel_index,&rl_line);
        bap_read_tg(&io,cur_gel_index,&tg_line);
        bap_read_sq(&io,cur_gel_index,sq_line);


        index = cur_gel_index;
        f2cstr(ar_line.lines.name,BAP_FILE_NAME_LENGTH,name,
               (size_t)BAP_FILE_NAME_LENGTH);
        length = abs(rl_line.lines.length);
        comp = (rl_line.lines.length < 0);
        seq = sq_line;
        seq[length] = '\0';
        pos = rl_line.lines.rel_pos;
        l_nbr = rl_line.lines.left_nbr;
        r_nbr = rl_line.lines.right_nbr;

        gel_details =
            build_list(
                atom_str(gel_rec),
                build_list(
                    atom_str(gel_index),
                    atom_int(index),
                    nil),
                build_list(
                    atom_str(gel_name),
                    atom_str(name),
                    nil),
                build_list(
                    atom_str(gel_length),
                    atom_int(length),
                    nil),
                build_list(
                    atom_str(gel_comp),
                    atom_int(comp),
                    nil),
                build_list(
                    atom_str(gel_seq),
                    atom_str(seq),
                    nil),
                build_list(
                    atom_str(gel_pos),
                    atom_int(pos),
                    nil),
                build_list(
                    atom_str(gel_l_nbr),
                    atom_int(l_nbr),
                    nil),
                build_list(
                    atom_str(gel_r_nbr),
                    atom_int(r_nbr),
                    nil),
                nil);



        /* Get raw data details */
        if (tg_line.lines.comment) {
            List *raw_data_details;

            char *rd;
            int rd_length;
            int rd_cut;
            int rd_ulen;
            char rd_type[5];
            char rd_file[19];

            rd = bap_read_comment(&io, tg_line.lines.comment);
            sscanf(rd,"%6d%6d%6d%*s",&rd_length, &rd_cut, &rd_ulen);
            f2cstr(&rd[18],4,rd_type,(size_t)4);
            f2cstr(&rd[22],18,rd_file,(size_t)18);


            raw_data_details =
                build_list(
                    build_list(
                        atom_str(gel_rd_length),
                        atom_int(rd_length),
                        nil),
                    build_list(
                        atom_str(gel_rd_cut),
                        atom_int(rd_cut),
                        nil),
                    build_list(
                        atom_str(gel_rd_ulen),
                        atom_int(rd_ulen),
                        nil),
                    build_list(
                        atom_str(gel_rd_type),
                        atom_str(rd_type),
                        nil),
                    build_list(
                        atom_str(gel_rd_file),
                        atom_str(rd_file),
                        nil),
                    nil);

            join_list (gel_details, raw_data_details, nil);

        }



        /*
        ** Process tags, maintaining separate lists for
        ** (a) special tags
        ** (b) annotation
        ** (c) edits
        */
        {
            List *specials;
            List *notes;
            List *edits;

            int_4 next;
            specials = nil;
            notes =
                build_list(
                    atom_str(gel_annotation),
                    nil);
            edits =
                build_list(
                    atom_str(gel_edits),
                    nil);

            while (tg_line.lines.next) {
                next = tg_line.lines.next;
                bap_read_tg(&io,next,&tg_line);

                if (strncmp(tg_line.lines.type.c,"*LC*",4)==0) {
                    if (tg_line.lines.comment) {
                        List *lc;
                        lc = build_list(
                                 atom_str(gel_l_cut_seq),
                                 atom_str(bap_read_comment(&io,tg_line.lines.comment)),
                                 nil);
                        if (isNil(specials))
                            specials = build_list(lc,nil);
                        else
                            specials = join_list(specials,build_list(lc,nil),nil);
                    }
                } else if (strncmp(tg_line.lines.type.c,"*RC*",4)==0) {
                    if (tg_line.lines.comment) {
                        List *rc;
                        rc = build_list(
                                 atom_str(gel_r_cut_seq),
                                 atom_str(bap_read_comment(&io,tg_line.lines.comment)),
                                 nil);
                        if (isNil(specials))
                            specials = build_list(rc,nil);
                        else
                            specials = join_list(specials,build_list(rc,nil),nil);
                    }
                } else if (strncmp(tg_line.lines.type.c,"*",1)==0) {
                    List *ed;
                    char base[2];
                    base[0] = tg_line.lines.type.c[3];
                    base[1] = '\0';
                    ed = build_list(
                             build_list(
                                 atom_str(gel_ed_op),
                                 atom_str( (strncmp(tg_line.lines.type.c,"*IN",3))==0
                                           ? gel_ed_insert : gel_ed_delete),
                                 nil),
                             build_list(
                                 atom_str(gel_ed_base),
                                 atom_str(base),
                                 nil),
                             build_list(
                                 atom_str(gel_ed_base_pos),
                                 atom_int( tg_line.lines.position ),
                                 nil),
                             nil);
                    edits = join_list(edits, build_list(ed,nil),nil);
                } else {
                    List *an;
                    char type[5];
                    char *com;
                    strncpy(type,tg_line.lines.type.c,4);
                    type[4]='\0';
                    com = bap_read_comment(&io,tg_line.lines.comment);
                    an = build_list(
                             build_list(
                                 atom_str(gel_an_pos),
                                 atom_int(tg_line.lines.position),
                                 nil),
                             build_list(
                                 atom_str(gel_an_len),
                                 atom_int(tg_line.lines.length),
                                 nil),
                             build_list(
                                 atom_str(gel_an_type),
                                 atom_str(type),
                                 nil),
                             (com == NULL) ? nil :
                             build_list(
                                 atom_str(gel_an_comment),
                                 atom_str(com),
                                 nil),
                             nil);
                    notes = join_list(notes,build_list(an,nil),nil);

                }
            }
            if (isNil(specials))
                gel_details = join_list(gel_details,build_list(edits,nil),build_list(notes,nil),nil);
            else
                gel_details = join_list(gel_details,specials,build_list(edits,nil),build_list(notes,nil),nil);

        }



        cur_gel_index++;
        free(sq_line);

    }

    return gel_details;

}