void igs_m027_state::sdwx_gfx_decrypt() { int i; unsigned rom_size = 0x80000; UINT8 *src = (UINT8 *) (memregion("gfx1")->base()); dynamic_buffer result_data(rom_size); for (i=0; i<rom_size; i++) result_data[i] = src[BITSWAP24(i, 23,22,21,20,19,18,17,16,15,14,13,12,11,8,7,6,10,9,5,4,3,2,1,0)]; for (i=0; i<rom_size; i+=0x200) { memcpy(src+i+0x000,&result_data[i+0x000],0x80); memcpy(src+i+0x080,&result_data[i+0x100],0x80); memcpy(src+i+0x100,&result_data[i+0x080],0x80); memcpy(src+i+0x180,&result_data[i+0x180],0x80); } }
void igs_m027_state::sdwx_gfx_decrypt() { int i; unsigned rom_size = 0x80000; uint8_t *src = (uint8_t *) (memregion("tilemaps")->base()); std::vector<uint8_t> result_data(rom_size); for (i=0; i<rom_size; i++) result_data[i] = src[bitswap<24>(i, 23,22,21,20,19,18,17,16,15,14,13,12,11,8,7,6,10,9,5,4,3,2,1,0)]; for (i=0; i<rom_size; i+=0x200) { memcpy(src+i+0x000,&result_data[i+0x000],0x80); memcpy(src+i+0x080,&result_data[i+0x100],0x80); memcpy(src+i+0x100,&result_data[i+0x080],0x80); memcpy(src+i+0x180,&result_data[i+0x180],0x80); } }
int init_sip_local_align_plot(Tcl_Interp *interp, int seq_id_h, int seq_id_v, int result_id, char *raster_win, int raster_id, char *colour, int line_width) { char *opts[7]; seq_result *result; d_plot *data; if (NULL == (opts[1] = (char *)xmalloc((strlen(colour)+1) * sizeof(char)))) return -1; if (NULL == (opts[3] = (char *)xmalloc(5 * sizeof(char)))) return -1; if (NULL == (opts[5] = (char *)xmalloc(15 * sizeof(char)))) return -1; opts[0] = "-fg"; strcpy(opts[1], colour); opts[2] = "-linewidth"; sprintf(opts[3], "%d", line_width); opts[4] = "-capstyle"; strcpy(opts[5], "round"); opts[6] = NULL; result = result_data(result_id, GetSeqNum(seq_id_h)); data = result->data; init_dot_plot(interp, seq_id_h, seq_id_v, result_id, "local", raster_win, raster_id, opts, 6, LINE, data->dim); xfree(opts[1]); xfree(opts[3]); xfree(opts[5]); return 0; }
int init_sip_similar_spans_plot(Tcl_Interp *interp, int seq_id_h, int seq_id_v, int result_id, char *raster_win, int raster_id, char *colour, int line_width) { char *opts[5]; seq_result *result; d_plot *data; if (NULL == (opts[1] = (char *)xmalloc((strlen(colour)+1) * sizeof(char)))) return -1; if (NULL == (opts[3] = (char *)xmalloc(5 * sizeof(char)))) return -1; opts[0] = "-fg"; strcpy(opts[1], colour); opts[2] = "-linewidth"; sprintf(opts[3], "%d", line_width); opts[4] = NULL; result = result_data(result_id, GetSeqNum(seq_id_h)); data = result->data; init_dot_plot(interp, seq_id_h, seq_id_v, result_id, "similar spans", raster_win, raster_id, opts, 4, DOT, data->dim); xfree(opts[1]); xfree(opts[3]); return 0; }
/* * plots the results of a search on the plot window of the contig selector */ void PlotRepeats(GapIO *io, mobj_repeat *repeat) { int i; char cmd[1024]; int pos1, pos2; int x1, y1, x2, y2; /* int max_x = 0; */ int sense1 = 1; int sense2 = 1; int inum; char *colour = repeat->colour; int width = repeat->linewidth; char *tag_id = repeat->tagname; obj_match new_match; int cs_id; obj_cs *cs; cs_id = type_to_result(io, REG_TYPE_CONTIGSEL, 0); cs = result_data(io, cs_id, 0); for (i = 0; i < repeat->num_match; i++){ obj_match *match = (obj_match *)&repeat->match[i]; /* Check if shown */ if (match->flags & OBJ_FLAG_HIDDEN) continue; /* clip length of match if necessary */ new_match = *match; DoClipping(io, &new_match); /* * printf("new pos1 %d pos2 %d length %d\n", * new_match.pos1, new_match.pos2, new_match.length); * printf("match pos1 %d pos2 %d length %d \n", * match->pos1, match->pos2, match->length); */ pos1 = find_position_in_DB(io, abs(new_match.c1), new_match.pos1); pos2 = find_position_in_DB(io, abs(new_match.c2), new_match.pos2); /* convert contig code back to sense ie -ve contig number means * match on opposite strand */ if (new_match.c1 < 0) { sense1 = -1; } else { sense1 = 1; } if (new_match.c2 < 0) { sense2 = -1; } else { sense2 = 1; } /* * draw matches of same sense (+:+ or -:-) as p1,p2 * \ * p1+len, p2+len * draw matches of different sense (+:- or -:+) as p1+len, p2 * / * p1, p2+len */ x1 = pos1; x2 = pos1 + new_match.length; if (sense1 == sense2) { y1 = pos2; y2 = pos2 + new_match.length; } else { y1 = pos2 + new_match.length; y2 = pos2; } /* need to plot in top half of screen therefore 'x' contig should be * larger than the corresponding 'y' contig */ /* printf("R:%d@%d,%d@%d(%d) C:%d@%d,%d@%d(%d)\n", match->pos1, match->c1, match->pos2, match->c2, match->length, new_match.pos1, new_match.c1, new_match.pos2, new_match.c2, new_match.length); printf("tag_id %s \n", tag_id); */ if (pos1 > pos2){ sprintf(cmd,"%s create line %d %d %d %d -width %d -capstyle round " "-tags {num_%d num_%d %s S} -fill %s", cs->window, x1, y1, x2, y2, width, abs(new_match.c1), abs(new_match.c2), tag_id, colour); } else { sprintf(cmd,"%s create line %d %d %d %d -width %d -capstyle round " "-tags \"num_%d num_%d %s S\" -fill %s", cs->window, y1, x1, y2, x2, width, abs(new_match.c1), abs(new_match.c2), tag_id, colour); } /* printf("cmd %s \n", cmd); */ if (TCL_ERROR == Tcl_Eval(GetInterp(), cmd)) printf("%s \n", GetInterpResult()); inum = atoi(GetInterpResult()); match->inum = inum; HashInsert(csplot_hash, inum, match); } /* scale new matches */ scaleSingleCanvas(GetInterp(), cs->world, cs->canvas, cs->window, 'b', tag_id); }
void update_contig_order(Tcl_Interp *interp, GapIO *io, int cs_id, int *contig_array, int num_contigs, int cx) { GCardinal *order = ArrayBase(GCardinal, io->contig_order); obj_cs *cs; int i, j; double wx, wy; int left_position; char cmd[1024]; int orig_pos = 0; reg_buffer_start rs; reg_buffer_end re; reg_order ro; cs = result_data(io, cs_id, 0); CanvasToWorld(cs->canvas, cx, 0, &wx, &wy); /* * returns the nth contig to the left of the wx, NOT the contig number. * If this is to the left of the first contig, returns 0. */ left_position = find_left_position(io, order, wx); for (i = 0; i < NumContigs(io); i++) { if (order[i] == contig_array[0]) { orig_pos = i+1; break; } } /* convert index on order to index on contig num */ for (i = 0; i < num_contigs; i++) { for (j = 0; j < NumContigs(io); j++) { if (order[j] == contig_array[i]) break; } ReOrder(io, order, j, left_position); if (j > left_position) { left_position++; orig_pos++; } } ro.job = REG_ORDER; ro.pos = left_position; #ifdef HACK /* HACK is there a better way of representing this - only need to * replot once */ contig_notify(io, 1, (reg_data *)&ro); #endif /* Notify of the start of the flurry of updates */ rs.job = REG_BUFFER_START; for (i = 0; i < num_contigs; i++) { contig_notify(io, contig_array[i], (reg_data *)&rs); } ro.job = REG_ORDER; ro.pos = left_position; for (i = 0; i< num_contigs; i++) contig_notify(io, contig_array[i], (reg_data *)&ro); /* Notify the end of our updates */ re.job = REG_BUFFER_END; for (i = 0; i < num_contigs; i++) { contig_notify(io, contig_array[i], (reg_data *)&re); } /* draw larger separator tick to show where contig was moved from */ sprintf(cmd, "HighlightSeparator %s %d", cs->hori, orig_pos); Tcl_Eval(interp, cmd); }
void check_assembly_callback(GapIO *io, tg_rec contig, void *fdata, reg_data *jdata) { mobj_checkass *r = (mobj_checkass *)fdata; obj_cs *cs; int cs_id; cs_id = type_to_result(io, REG_TYPE_CONTIGSEL, 0); cs = result_data(io, cs_id); switch (jdata->job) { case REG_QUERY_NAME: sprintf(jdata->name.line, "Check Assembly"); break; case REG_JOIN_TO: csmatch_join_to(io, contig, &jdata->join, (mobj_repeat *)r, csplot_hash, cs->window); break; case REG_COMPLEMENT: csmatch_complement(io, contig, (mobj_repeat *)r, csplot_hash, cs->window); break; case REG_GET_OPS: if (r->all_hidden) jdata->get_ops.ops = "PLACEHOLDER\0PLACEHOLDER\0Information\0" "PLACEHOLDER\0Hide all\0Reveal all\0Sort Matches\0" "SEPARATOR\0Remove\0"; else jdata->get_ops.ops = "Use for 'Next'\0Reset 'Next'\0Information\0" "Configure\0Hide all\0Reveal all\0Sort Matches\0" "SEPARATOR\0Remove\0"; break; case REG_INVOKE_OP: switch (jdata->invoke_op.op) { case 0: /* Next */ Tcl_VarEval(GetInterp(), "CSLastUsed ", CPtr2Tcl(r), NULL); break; case 1: /* Reset Next */ csmatch_reset_next((mobj_repeat *)r); break; case 2: /* Information */ csmatch_info((mobj_repeat *)r, "Check Assembly"); break; case 3: /* Configure */ csmatch_configure(io, cs->window, (mobj_repeat *)r); break; case 4: /* Hide all */ csmatch_hide(GetInterp(), cs->window, (mobj_repeat *)r, csplot_hash); break; case 5: /* Reveal all */ csmatch_reveal(GetInterp(), cs->window, (mobj_repeat *)r, csplot_hash); break; case 6: /* Sort */ qsort(r->match, r->num_match, sizeof(obj_checkass), sort_func); csmatch_reset_hash(csplot_hash, (mobj_repeat *)r); r->current = -1; break; case 7: /* Remove */ csmatch_remove(io, cs->window, (mobj_repeat *)r, csplot_hash); break; } break; case REG_PARAMS: jdata->params.string = r->params; break; case REG_NUMBER_CHANGE: csmatch_renumber(io, contig, jdata->number.number, (mobj_repeat *)r, csplot_hash, cs->window); break; case REG_ORDER: csmatch_replot(io, (mobj_repeat *)r, csplot_hash, cs->window); break; case REG_QUIT: csmatch_remove(io, cs->window, (mobj_repeat *)r, csplot_hash); break; case REG_DELETE: csmatch_contig_delete(io, (mobj_repeat *)r, contig, cs->window, csplot_hash); break; case REG_LENGTH: csmatch_replot(io, (mobj_repeat *)r, csplot_hash, cs->window); break; } }
/* * Match callback. * 'obj' is a match contained within the check assembly list. */ void *checkass_obj_func(int job, void *jdata, obj_checkass *obj, mobj_checkass *ca) { static char buf[80]; obj_cs *cs; int cs_id; cs_id = type_to_result(ca->io, REG_TYPE_CONTIGSEL, 0); cs = result_data(ca->io, cs_id); switch(job) { case OBJ_LIST_OPERATIONS: return "Information\0Hide\0Invoke contig editor *\0" "SEPARATOR\0Remove\0"; case OBJ_INVOKE_OPERATION: switch(*((int *)jdata)) { case 0: /* Information */ vfuncgroup(1, "2D plot matches"); case -1: /* Information from results manager */ start_message(); vmessage("check_assembly match:\n"); vmessage(" From contig %s(#%"PRIrec") at %d\n", get_contig_name(ca->io, ABS(obj->c1)), io_clnbr(ca->io, ABS(obj->c1)), obj->pos1); vmessage(" With contig %s(#%"PRIrec") at %d\n", get_contig_name(ca->io, ABS(obj->c2)), io_clnbr(ca->io, ABS(obj->c2)), obj->pos2); vmessage(" Length %d, mismatch %2.2f%%\n\n", obj->length, ((float)obj->score)/10000); end_message(cs->window); break; case 1: /* Hide */ obj_hide(GetInterp(), cs->window, obj, (mobj_repeat *)ca, csplot_hash); break; case -2: /* default */ case 2: /* Invoke contig editor */ { tg_rec cnum, llino; int pos; obj->flags |= OBJ_FLAG_VISITED; ca->current = obj - ca->match; Tcl_VarEval(GetInterp(), "CSLastUsed ", CPtr2Tcl(ca), NULL); cnum = abs(obj->c1); llino = obj->read; pos = obj->pos1 - io_relpos(ca->io, llino); if (pos < 1) pos = 1; if (pos > ABS(io_length(ca->io, llino))) pos = ABS(io_length(ca->io, llino)); // if ((id = editor_available(cnum, 1)) != -1) { // move_editor(id, llino, pos); // } else { edit_contig(ca->io, cnum, llino, pos); // } break; } case 3: /* Remove */ obj_remove(GetInterp(), cs->window, obj, (mobj_repeat *)ca, csplot_hash); break; } break; case OBJ_GET_BRIEF: sprintf(buf, "check_assembly: #%"PRIrec"@%d len %d, mis %2.2f%%", obj->read, obj->pos1, obj->length, ((float)obj->score)/10000); return buf; } return NULL; }
void tst_QMessageAuthenticationCode::result_incremental_data() { result_data(); }
/* * Match callback. * 'obj' is a match contained within the 'repeat' list. */ void *repeat_obj_func(int job, void *jdata, obj_match *obj, mobj_repeat *repeat) { static char buf[80]; obj_cs *cs; int cs_id; cs_id = type_to_result(repeat->io, REG_TYPE_CONTIGSEL, 0); cs = result_data(repeat->io, cs_id, 0); switch(job) { case OBJ_LIST_OPERATIONS: if (io_rdonly(repeat->io) && ((obj->c1 > 0 && obj->c2 < 0) || (obj->c1 < 0 && obj->c2 > 0))) { return "Information\0Hide\0IGNORE\0" "IGNORE\0SEPARATOR\0Remove\0"; } else { return "Information\0Hide\0Invoke join editor *\0" "Invoke contig editors\0SEPARATOR\0Remove\0"; } case OBJ_INVOKE_OPERATION: switch(*((int *)jdata)) { case 0: /* Information */ vfuncgroup(1, "2D plot matches"); case -1: /* Information from results manager */ start_message(); vmessage("Repeat match (%s)\n", ((obj->c1 > 0) == (obj->c2 > 0)) ? "direct" : "inverted"); vmessage(" From contig %s(#%d) at %d\n", get_contig_name(repeat->io, ABS(obj->c1)), io_clnbr(repeat->io, ABS(obj->c1)), obj->pos1); vmessage(" With contig %s(#%d) at %d\n", get_contig_name(repeat->io, ABS(obj->c2)), io_clnbr(repeat->io, ABS(obj->c2)), obj->pos2); vmessage(" Length %d\n\n", obj->length); end_message(cs->window); break; case 1: /* Hide */ obj_hide(GetInterp(), cs->window, obj, (mobj_repeat *)repeat, csplot_hash); break; case -2: /* default */ case 2: /* Invoke join editor */ { int cnum[2], llino[2], pos[2]; obj->flags |= OBJ_FLAG_VISITED; repeat->current = obj - repeat->match; Tcl_VarEval(GetInterp(), "CSLastUsed ", CPtr2Tcl(repeat), NULL); cnum[0] = ABS(obj->c1); cnum[1] = ABS(obj->c2); /* Complement a contig if needed */ if ((obj->c1 > 0) != (obj->c2 > 0)) { if (cnum[0] == cnum[1]) { verror(ERR_WARN, "join_editor", "cannot display the same contig in two " "different orientations"); break; } if (io_rdonly(repeat->io)) { bell(); break; } if (io_clength(repeat->io, ABS(obj->c1)) < io_clength(repeat->io, ABS(obj->c2))) { if (-1 == complement_contig(repeat->io, ABS(obj->c1))) if (-1 == complement_contig(repeat->io, ABS(obj->c2))) return NULL; } else { if (-1 == complement_contig(repeat->io, ABS(obj->c2))) if (-1 == complement_contig(repeat->io, ABS(obj->c1))) return NULL; } } /* * NB: obj->pos1 now may not be the same value as when this * function was entered, due to the complementing! */ pos[0] = obj->pos1; pos[1] = obj->pos2; llino[0] = io_clnbr(repeat->io, cnum[0]); llino[1] = io_clnbr(repeat->io, cnum[1]); join_contig(GetInterp(), repeat->io, cnum, llino, pos, consensus_cutoff, quality_cutoff); break; } case 3: /* Invoke contig editors */ { int cnum, llino, pos; cnum = ABS(obj->c1); llino = io_clnbr(repeat->io, cnum); pos = obj->pos1; edit_contig(GetInterp(), repeat->io, cnum, llino, pos, consensus_cutoff, quality_cutoff, 0, NULL); cnum = ABS(obj->c2); llino = io_clnbr(repeat->io, cnum); pos = obj->pos2; edit_contig(GetInterp(), repeat->io, cnum, llino, pos, consensus_cutoff, quality_cutoff, 0, NULL); break; } case 4: /* Remove */ obj_remove(GetInterp(), cs->window, obj, (mobj_repeat *)repeat, csplot_hash); break; } break; case OBJ_GET_BRIEF: sprintf(buf, "Repeat: %c#%d@%d with %c#%d@%d, len %d", obj->c1 > 0 ? '+' : '-', io_clnbr(repeat->io, ABS(obj->c1)), obj->pos1, obj->c2 > 0 ? '+' : '-', io_clnbr(repeat->io, ABS(obj->c2)), obj->pos2, obj->length); return buf; } return NULL; }
int init_splice_search_plot(Tcl_Interp *interp, char *raster_win, int raster_id, char *r_id, int seq_id, char *colours, int line_width, float tick_ht) { int seq_num; int num_id; Tcl_CmdInfo info; Tk_Raster *raster; RasterResult *raster_result; cursor_t *cursor; seq_result *nip_result = NULL; seq_cursor_notify cn; stick *data; int i, cnt; int retval = -1; char **result_id = NULL; char **colour = NULL; seq_num = GetSeqNum(seq_id); if (Tcl_SplitList(interp, colours, &num_id, &colour) != TCL_OK) goto cleanup; if (Tcl_SplitList(interp, r_id, &num_id, &result_id) != TCL_OK) goto cleanup; if (Tcl_GetCommandInfo(interp, raster_win, &info) == 0) goto cleanup; raster = (Tk_Raster*)info.clientData; RasterInitPlotFunc(raster, SeqRasterPlotFunc); raster_result = raster_id_to_result(raster_id); cursor = find_raster_result_cursor(raster_result, seq_id, HORIZONTAL); cnt = 0; for (i = 0; i < num_id; i++) { if (atoi(result_id[i]) > -1) { nip_result = result_data(atoi(result_id[i]), seq_num); } else { cnt++; } } /* no results were found */ if (cnt == num_id) { retval = 0; goto cleanup; } data = nip_result->data; /* move cursor to start position if no cursor is yet present */ if (raster_result->cursor_array[cursor->id].prev_pos == -1 && data->ap_array[0].dim.x0 > raster_result->cursor_array[cursor->id].prev_pos) { cursor->abspos = data->ap_array[0].dim.x0; } for (i = 0; i < num_id; i++) { if (-1 == NipSpliceSearchPlot(interp, atoi(result_id[i]), seq_num, raster_win, colour[i], line_width, tick_ht, i+1)) { verror(ERR_FATAL,"nip splice search", "error in saving matches\n"); goto cleanup; } } /* * need to ensure done all the necessary plotting before adding the * cursor */ Tcl_VarEval(interp, "update idletasks ", NULL); cn.job = SEQ_CURSOR_NOTIFY; cn.cursor = cursor; cn.cursor->job = CURSOR_MOVE; seq_notify(seq_num, (seq_reg_data *)&cn); raster_result = raster_id_to_result(raster_id); /* adding 3 results to a single raster */ AddResultToRaster(raster_result); AddResultToRaster(raster_result); AddResultToRaster(raster_result); retval = 0; cleanup: if(result_id) Tcl_Free((char *)result_id); if(colour) Tcl_Free((char *)colour); return retval; }
int NipSpliceSearchPlot(Tcl_Interp *interp, int result_id, int seq_num, char *raster_win, char *colour, int line_width, float tick_ht, int frame) { Tcl_CmdInfo info; Tk_Raster *raster; char *opts[5]; out_raster *output; config *configure_d; config *configure_a; int raster_id; int superimpose = 1; RasterResult *raster_result; stick *data; seq_result *nip_result; /* no results were found */ if (result_id == -1) return 0; nip_result = result_data(result_id, seq_num); data = nip_result->data; if (NULL == (output = (out_raster *)xmalloc(sizeof(out_raster)))) return -1; if (NULL == (opts[1] = (char *)xmalloc(100 * sizeof(char)))) return -1; if (NULL == (opts[3] = (char *)xmalloc(5 * sizeof(char)))) return -1; if (NULL == (output->configure = (config **)xmalloc(2*sizeof(config*)))) return -1; if (NULL == (configure_a = (config *)xmalloc(sizeof(config)))) return -1; if (NULL == (configure_d = (config *)xmalloc(sizeof(config)))) return -1; configure_a->position = 0.0; configure_a->x_direction = '+'; configure_a->y_direction = '-'; configure_a->height = tick_ht; configure_a->zoom = 1; configure_a->scroll = 0; configure_d->position = 0.0; configure_d->x_direction = '+'; configure_d->y_direction = '+'; configure_d->height = tick_ht; configure_d->zoom = 1; configure_d->scroll = 0; if (Tcl_GetCommandInfo(interp, raster_win, &info) == 0) return -1; raster = (Tk_Raster*)info.clientData; RasterInitPlotFunc(raster, SeqRasterPlotFunc); strcpy(output->raster_win, raster_win); output->interp = interp; output->hidden = 0; /* need to check if superimposing result on another plot */ Tcl_VarEval(interp, "GetRasterId ", output->raster_win, NULL); raster_id = atoi(Tcl_GetStringResult(interp)); raster_result = raster_id_to_result(raster_id); if (raster_result->num_results == 0) { superimpose = 0; } if (!superimpose) { RasterSetWorldScroll(raster, (double)data->ap_array[0].dim.x0, data->ap_array[0].dim.y0, (double)data->ap_array[0].dim.x1, data->ap_array[0].dim.y1); SeqAddRasterToWindow(interp, raster_win, nip_result->graph); } opts[0] = "-fg"; strcpy(opts[1], colour); opts[2] = "-linewidth"; sprintf(opts[3], "%d", line_width); opts[4] = NULL; output->env_index = CreateDrawEnviron(interp, raster, 4, opts); nip_result->output = (void *)output; output->scroll = 'x'; output->configure[0] = configure_d; output->configure[1] = configure_a; output->sf_m = 1.0; output->sf_c = 0.0; if (superimpose) { SeqSuperimposeResult(interp, output->raster_win, result_id, data->ap_array[0].dim.x0, data->ap_array[0].dim.y0, data->ap_array[0].dim.x1, data->ap_array[0].dim.y1); } ReplotAllCurrentZoom(interp, raster_win); xfree(opts[1]); xfree(opts[3]); return 0; }
/* * functions to act upon matches generated using TAGs */ void *find_oligo_obj_func1(int job, void *jdata, obj_match *obj, mobj_find_oligo *find_oligo) { static char buf[80]; obj_cs *cs; int cs_id; cs_id = type_to_result(find_oligo->io, REG_TYPE_CONTIGSEL, 0); cs = result_data(find_oligo->io, cs_id); switch(job) { case OBJ_LIST_OPERATIONS: return "Information\0Hide\0Invoke join editor *\0" "Invoke contig editors\0SEPARATOR\0Remove\0"; case OBJ_INVOKE_OPERATION: switch(*((int *)jdata)) { case 0: /* Information */ vfuncgroup(1, "2D plot matches"); case -1: /* Information from results manager */ start_message(); vmessage("Sequence search:\n"); vmessage(" From contig %s(#%"PRIrec") at %d\n", get_contig_name(find_oligo->io, ABS(obj->c1)), io_clnbr(find_oligo->io, ABS(obj->c1)), obj->pos1); vmessage(" With contig %s(#%"PRIrec") at %d\n", get_contig_name(find_oligo->io, ABS(obj->c2)), io_clnbr(find_oligo->io, ABS(obj->c2)), obj->pos2); vmessage(" Length %d, match %2.2f%%\n\n", obj->length, (float)obj->score / obj->length * 100.0 ); end_message(cs->window); break; case 1: /* Hide */ obj_hide(GetInterp(), cs->window, obj, (mobj_find_oligo *)find_oligo, csplot_hash); break; case -2: /* default */ case 2: /* Invoke join editor */ { tg_rec cnum[2], llino[2]; int pos[2]; obj->flags |= OBJ_FLAG_VISITED; find_oligo->current = obj - find_oligo->match; Tcl_VarEval(GetInterp(), "CSLastUsed ", CPtr2Tcl(find_oligo), NULL); cnum[0] = ABS(obj->c1); cnum[1] = ABS(obj->c2); /* Complement a contig if needed */ if ((obj->c1 > 0) != (obj->c2 > 0)) { if (cnum[0] == cnum[1]) { verror(ERR_WARN, "join_editor", "cannot display the same contig in two " "different orientations"); break; } if (find_oligo->io->read_only) { bell(); break; } if (io_clength(find_oligo->io, ABS(obj->c1)) < io_clength(find_oligo->io, ABS(obj->c2))) { if (-1 == complement_contig(find_oligo->io, ABS(obj->c1))) if (-1 == complement_contig(find_oligo->io, ABS(obj->c2))) return NULL; } else { if (-1 == complement_contig(find_oligo->io, ABS(obj->c2))) if (-1 == complement_contig(find_oligo->io, ABS(obj->c1))) return NULL; } } /* * NB: obj->pos1 now may not be the same value as when this * function was entered, due to the complementing! */ pos[0] = obj->pos1; pos[1] = obj->pos2; llino[0] = io_clnbr(find_oligo->io, cnum[0]); llino[1] = io_clnbr(find_oligo->io, cnum[1]); join_contig(find_oligo->io, cnum, llino, pos); break; } case 3: /* Invoke contig editors */ { tg_rec cnum, llino; int pos; cnum = ABS(obj->c1); llino = io_clnbr(find_oligo->io, cnum); pos = obj->pos1; edit_contig(find_oligo->io, cnum, llino, pos); cnum = ABS(obj->c2); llino = io_clnbr(find_oligo->io, cnum); pos = obj->pos2; edit_contig(find_oligo->io, cnum, llino, pos); break; } case 4: /* Remove */ obj_remove(GetInterp(), cs->window, obj, (mobj_find_oligo *)find_oligo, csplot_hash); break; } break; case OBJ_GET_BRIEF: sprintf(buf, "Oligo: %c#%"PRIrec"@%d with %c#%"PRIrec"@%d, " "len %d, match %2.2f%%", obj->c1 > 0 ? '+' : '-', io_clnbr(find_oligo->io, ABS(obj->c1)), obj->pos1, obj->c2 > 0 ? '+' : '-', io_clnbr(find_oligo->io, ABS(obj->c2)), obj->pos2, obj->length, (float)obj->score / obj->length * 100.0); return buf; } return NULL; }
/* * functions to act upon matches generated using SEQUENCE */ void *find_oligo_obj_func2(int job, void *jdata, obj_match *obj, mobj_find_oligo *find_oligo) { static char buf[80]; obj_cs *cs; int cs_id; cs_id = type_to_result(find_oligo->io, REG_TYPE_CONTIGSEL, 0); cs = result_data(find_oligo->io, cs_id); switch(job) { case OBJ_LIST_OPERATIONS: return "Information\0Hide\0Invoke contig editor *\0" "SEPARATOR\0Remove\0"; case OBJ_INVOKE_OPERATION: switch(*((int *)jdata)) { case 0: /* Information */ vfuncgroup(1, "2D plot matches"); case -1: /* Information from results manager */ start_message(); vmessage("Sequence search\n"); vmessage(" Contig %s(#%"PRIrec") at %d\n", get_contig_name(find_oligo->io, ABS(obj->c1)), io_clnbr(find_oligo->io, ABS(obj->c1)), obj->pos1); vmessage(" Length %d, match %2.2f%%\n\n", obj->length, (float)obj->score / obj->length * 100.0 ); end_message(cs->window); break; case 1: /* Hide */ obj_hide(GetInterp(), cs->window, obj, (mobj_find_oligo *)find_oligo, csplot_hash); break; case -2: /* default */ case 2: /* Invoke contig editor */ { tg_rec cnum, llino; int pos; obj->flags |= OBJ_FLAG_VISITED; find_oligo->current = (int)(obj - find_oligo->match); cnum = ABS(obj->c1); llino = 0; pos = obj->pos1; /* FIXME if ((id = editor_available(cnum, 1)) == -1) { edit_contig(GetInterp(), find_oligo->io, cnum, llino, pos, consensus_cutoff, quality_cutoff, 0, NULL); } if ((id = editor_available(cnum, 1)) != -1) { move_editor(id, llino, pos); editor_select_region(id, llino, pos, obj->length); } */ edit_contig(find_oligo->io, cnum, llino, pos); break; } case 3: /* Remove */ obj_remove(GetInterp(), cs->window, obj, (mobj_find_oligo *)find_oligo, csplot_hash); break; } break; case OBJ_GET_BRIEF: sprintf(buf, "Oligo: %c#%"PRIrec"@%d with %c#%"PRIrec"@%d, " "len %d, match %2.2f%%", obj->c1 > 0 ? '+' : '-', io_clnbr(find_oligo->io, ABS(obj->c1)), obj->pos1, obj->c2 > 0 ? '+' : '-', io_clnbr(find_oligo->io, ABS(obj->c2)), obj->pos2, obj->length, (float)obj->score / obj->length * 100.0); return buf; } return NULL; }