static int do_1d_mark(int cmd_is_ds, int retc, char *retv[], int num_num_args, double *num_val_ptr ) { char return_buf[ 20 ]; int ctrace, mark_mode, update_flag; float *spectrum, integral, max_int; double cr_val, del_val; /* `calc_spec' is a subroutine in `proc2d.c' */ mark_mode = CURSOR_MODE; ctrace = currentindex(); spectrum = calc_spec( ctrace-1, 0, FALSE, TRUE, &update_flag ); if (num_num_args == 2) { cr_val = num_val_ptr[ 0 ]; del_val = num_val_ptr[ 1 ]; mark_mode = BOX_MODE; } else if (num_num_args == 1) { cr_val = num_val_ptr[ 0 ]; del_val = 0.0; mark_mode = CURSOR_MODE; } else { /* No numeric arguments */ if (cmd_is_ds) { if (ds_mode == CURSOR_MODE || ds_mode == BOX_MODE) mark_mode = ds_mode; else mark_mode = CURSOR_MODE; } cr_val = cr; del_val = (mark_mode == CURSOR_MODE) ? 0.0 : delta; } if (range_check( cr_val, del_val, mark_mode, HORIZ)) ABORT; /* The ds mark program gets its cursor and delta from its argument list. */ ds_mark( spectrum, cr_val, del_val, mark_mode, (retc == 0), /* display results on the screen */ FALSE, /* ds_mark called from mark */ &integral, &max_int ); if (retc > 1) { rtoa( integral, &return_buf[ 0 ], 20 ); retv[ 1 ] = newString( &return_buf[ 0 ] ); } if (retc > 0) { rtoa( max_int, &return_buf[ 0 ], 20 ); retv[ 0 ] = newString( &return_buf[ 0 ] ); } RETURN; }
static char *_find(struct robject *r, rp_t src, int argc, char **argv) { char *link; link = robject_get_data(r, "link"); if (argc == 2) { if (link) { return saprintf(">> %s", link); } else { return rtoa(RP_CONS(getpid(), r->index)); } } else if (argc == 3 && !strcmp(argv[1], "-L")) { return rtoa(RP_CONS(getpid(), r->index)); } return errorstr(EINVAL); }
static int do_2d_mark(int retc, char *retv[], int num_num_args, double *num_val_ptr ) { char return_buf[ 20 ]; int mark_mode; float f1_max, f2_max, integral, max_int; double cr_vert, cr_horiz, del_vert, del_horiz; double cr_vert_orig, cr_horiz_orig, del_vert_orig, del_horiz_orig; int first_ch,last_ch,first_direction; /* The cr_vert_orig ... del_horiz_orig variables save the current cr`s and delta`s for each dimension, allowing the program to substitute the User arguments for the duration of the mark program. */ get_mark2d_info(&first_ch,&last_ch,&first_direction); if (num_num_args == 4) { if (first_direction == HORIZ) { cr_vert = num_val_ptr[ 0 ]; del_vert = num_val_ptr[ 1 ]; cr_horiz = num_val_ptr[ 2 ]; del_horiz = num_val_ptr[ 3 ]; } else { cr_horiz = num_val_ptr[ 0 ]; del_horiz = num_val_ptr[ 1 ]; cr_vert = num_val_ptr[ 2 ]; del_vert = num_val_ptr[ 3 ]; } mark_mode = BOX_MODE; } else if (num_num_args == 2) { if (first_direction == HORIZ) { cr_vert = num_val_ptr[ 0 ]; cr_horiz = num_val_ptr[ 1 ]; } else { cr_horiz = num_val_ptr[ 0 ]; cr_vert = num_val_ptr[ 1 ]; } del_horiz = 0.0; del_vert = 0.0; mark_mode = CURSOR_MODE; } /************************************************************************/ /* Establish the mode (box vs. cursor). First use the number of */ /* return values. If no return values, use the mode from DCONI. */ /* If that does not decide it, default to cursor mode. */ /************************************************************************/ else { if (retc > 0) mark_mode = (retc > 1) ? BOX_MODE : CURSOR_MODE; else if (dconi_mode == CURSOR_MODE || dconi_mode == BOX_MODE) mark_mode = dconi_mode; else mark_mode = CURSOR_MODE; get_cursor_pars(HORIZ,&cr_horiz,&del_horiz); get_cursor_pars(VERT,&cr_vert,&del_vert); } if (range_check( cr_horiz, del_horiz, mark_mode, HORIZ)) ABORT; if (range_check( cr_vert, del_vert, mark_mode, VERT)) ABORT; /* Save some current values as original vaules. */ if (num_num_args > 0) { get_cursor_pars( HORIZ, &cr_horiz_orig, &del_horiz_orig ); set_cursor_pars( HORIZ, cr_horiz, del_horiz ); get_cursor_pars( VERT, &cr_vert_orig, &del_vert_orig ); set_cursor_pars( VERT, cr_vert, del_vert ); } /* The dconi mark program gets its cursors and deltas from the Display Objects. */ dconi_mark( mark_mode, TRUE, /* display results on the screen */ FALSE, /* dconi_mark called from mark */ &integral, &max_int, &f1_max, &f2_max); /* Restore original values as current vaules. */ if (num_num_args > 0) { set_cursor_pars( HORIZ, cr_horiz_orig, del_horiz_orig ); set_cursor_pars( VERT, cr_vert_orig, del_vert_orig ); } if (retc > 3) { rtoa( f2_max, &return_buf[ 0 ], 20 ); retv[ 3 ] = newString( &return_buf[ 0 ] ); } if (retc > 2) { rtoa( f1_max, &return_buf[ 0 ], 20 ); retv[ 2 ] = newString( &return_buf[ 0 ] ); } if (retc > 1) { rtoa( integral, &return_buf[ 0 ], 20 ); retv[ 1 ] = newString( &return_buf[ 0 ] ); } if (retc > 0) { rtoa( max_int, &return_buf[ 0 ], 20 ); retv[ 0 ] = newString( &return_buf[ 0 ] ); } RETURN; }