コード例 #1
0
ファイル: full.c プロジェクト: DanIverson/OpenVnmrJ
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;
}
コード例 #2
0
ファイル: class_link.c プロジェクト: asegid/rhombus
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);
}
コード例 #3
0
ファイル: full.c プロジェクト: DanIverson/OpenVnmrJ
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;
}