Пример #1
0
Файл: motif.c Проект: E-LLP/QuIP
static void text_func2(Widget textID, XtPointer app_data, XtPointer widget_data )
{
	Screen_Obj *sop;
	const char *s;
	QSP_DECL

	INIT_MOTIF_QSP

	sop=find_object(DEFAULT_QSP_ARG  textID);
#ifdef CAUTIOUS
	if( sop == NO_SCREEN_OBJ ){
		WARN("CAUTIOUS:  text_func:  couldn't locate text widget");
		return;
	}
#endif /* CAUTIOUS */

	s = get_text(sop);

	if( s == NULL )
		ASSIGN_RESERVED_VAR("input_string","(null)");
	else {
		ASSIGN_RESERVED_VAR("input_string",s);
		free((void *)s);
	}

NADVISE("text_func2 calling chew_text...");
	chew_text(DEFAULT_QSP_ARG sop->so_action_text,"(text2 event)");
} // text_func2
Пример #2
0
Файл: motif.c Проект: E-LLP/QuIP
static void text_func(Widget textID, XtPointer app_data, XtPointer widget_data )
{
	Screen_Obj *sop;
	const char *s;

	sop=find_object(DEFAULT_QSP_ARG  textID);
#ifdef CAUTIOUS
	if( sop == NO_SCREEN_OBJ ){
		NWARN("CAUTIOUS:  text_func:  couldn't locate text widget");
		return;
	}
#endif /* CAUTIOUS */

	s = get_text(sop);

	if( s == NULL )
		assign_reserved_var( SOB_QSP_ARG  "input_string","(null)");
	else {
		assign_reserved_var( SOB_QSP_ARG  "input_string",s);
		free((void *)s);
	}

	/* We should chew the text when a return is typed, or something? */
NADVISE("text_func calling chew_text...");
	chew_text(DEFAULT_QSP_ARG sop->so_action_text,"(text event)");
} // text_func
Пример #3
0
Файл: motif.c Проект: E-LLP/QuIP
static void toggle_func(Widget toggleID, XtPointer app_data,
	XtPointer widget_data)
{
	Screen_Obj *sop;
	unsigned  char value;
	Arg al[10];
	int ac = 0;
	char val_str[4];
	QSP_DECL

	INIT_MOTIF_QSP

	sop = find_object(QSP_ARG  toggleID);
	if( sop != NO_SCREEN_OBJ ){
		XtSetArg(al[ac], XmNset, &value);
		XtGetValues(toggleID, al, 1);

		if( value > 1 ){
			sprintf(ERROR_STRING,"toggle has a value of %d, expected 0 or 1!?",value);
			WARN(ERROR_STRING);
			value &= 1;
		}
		sprintf(val_str,"%d",value);
		ASSIGN_RESERVED_VAR("toggle_state",val_str);
		chew_text(DEFAULT_QSP_ARG sop->so_action_text,"(toggle event)");
	}
	else WARN("couldn't locate toggle button");
} // toggle_func
Пример #4
0
Файл: motif.c Проект: E-LLP/QuIP
/*
 * Event callback function for `button1'.
 */
static void button_func(Widget buttonID, XtPointer app_data,
	XtPointer widget_data)
{
	Screen_Obj *sop;
	QSP_DECL

	INIT_MOTIF_QSP

	sop = find_object(QSP_ARG  buttonID);
	if( sop != NO_SCREEN_OBJ ){
		chew_text(DEFAULT_QSP_ARG sop->so_action_text,
						"(button event)");
	}
	else WARN("couldn't locate button");
}
Пример #5
0
Файл: motif.c Проект: E-LLP/QuIP
static void chooser_func(Widget buttonID, XtPointer app_data,	/* app_data should be NULL, see call to XtAddCallback */
	XtPointer widget_data)
{
	Screen_Obj *sop;
	XmToggleButtonCallbackStruct *cp;
	QSP_DECL

	INIT_MOTIF_QSP

	sop = find_object(QSP_ARG  buttonID);

	if( sop == NO_SCREEN_OBJ ) {
		WARN("couldn't locate chooser button");
		return;
	}

	cp = (XmToggleButtonCallbackStruct *)widget_data;

	/* For now, we don't support de-select functions, we handle that
	 * in the script handler.
	 */

	if( cp->set == 0 ) return;

	/* There is a special case where we re-select an already
	 * selected choice (which necessarily happens when there is
	 * only one choice).  Then we get two callbacks, which we may
	 * not want...
	 * We may be able to deal with that in the script...
	 */

	/*chew_text(DEFAULT_QSP_ARG sop->so_action_text); */
	ASSIGN_RESERVED_VAR("choice",sop->so_action_text);	/* BUG? action text? */

	/* Now we've found the button, how do we find the parent chooser? */

	sop = (Screen_Obj *)sop->so_parent;

#ifdef CAUTIOUS
	if( sop == NO_SCREEN_OBJ )
		ERROR1("CAUTIOUS:  chooser button with no parent!?");
#endif /* CAUTIOUS */

	chew_text(DEFAULT_QSP_ARG sop->so_action_text, "(chooser event)");
}
Пример #6
0
Файл: motif.c Проект: E-LLP/QuIP
static void slider_func(Widget sliderID, XtPointer app_data,
	XtPointer widget_data)
{
	Screen_Obj *sop;
	char str[LLEN];
	int value;
	QSP_DECL

	INIT_MOTIF_QSP

	sop = find_object(DEFAULT_QSP_ARG  sliderID);
	if( sop != NO_SCREEN_OBJ ){

		/* get the value from the slider */
		XmScaleGetValue(sliderID, &value);
		sprintf(str,"%d",value);
		ASSIGN_RESERVED_VAR("slider_val",str);
		chew_text(DEFAULT_QSP_ARG sop->so_action_text,"(slider event)");
	} else ERROR1("can't locate slider");
} // slider_func
Пример #7
0
Файл: motif.c Проект: E-LLP/QuIP
static void scroller_func(Widget scrollerID, XtPointer app_data,
	XmListCallbackStruct *list_cbs)
{
	String selection;
	Screen_Obj *sop;
	QSP_DECL

	INIT_MOTIF_QSP

	/* list->cbs holds XmString of selected list item */
	/* map this to "ordinary" string */

	XmStringGetLtoR(list_cbs->item, (char *)XmSTRING_DEFAULT_CHARSET,
		&selection);

	ASSIGN_RESERVED_VAR("selection",selection);
	sop = find_object(DEFAULT_QSP_ARG  scrollerID);
	if( sop == NO_SCREEN_OBJ ) return;
	chew_text(DEFAULT_QSP_ARG sop->so_action_text,"(scroller event)");
} // scroller_func
Пример #8
0
Файл: glmenu.c Проект: nasa/QuIP
static COMMAND_FUNC( do_slct_obj )
{
	int x, y;
	const char *s;
	GLuint n_names, *ptr;
	GLint hits;
	GLuint this_hit=0;	/* initialize to silence compiler */
	GLuint the_hit;
	float z1,z2;
	float z_this,z_min;
	int clickWindowSize = 1;
	GLint viewport[4];
	GLint i;
	GLuint j;
	char ret_str[32];

	x=(int)HOW_MANY("x location");
	y=(int)HOW_MANY("y location");
	s=NAMEOF("scene render command");
	s=savestr(s);

	//glPushMatrix();

	glSelectBuffer(MAX_SELECT,selectBuf);
	check_gl_error("glSelectBuffer");
	glRenderMode(GL_SELECT);
	check_gl_error("glRenderMode");

	glMatrixMode(GL_PROJECTION);
	check_gl_error("glMatrixMode");
	glPushMatrix();
	check_gl_error("glPushMatrix");
	glLoadIdentity();
	check_gl_error("glLoadIdentity");

	glGetIntegerv(GL_VIEWPORT,viewport);
	check_gl_error("glGetIntegerv");
	gluPickMatrix(x,viewport[3]-y,
			clickWindowSize,clickWindowSize,viewport);
	check_gl_error("gluPickMatrix");
	// Setup camera.
	//drawer.setupCamera(&manager);
	//glMatrixMode(GL_MODELVIEW);
	glInitNames();
	check_gl_error("glInitNames");
	glPushName(0);
	check_gl_error("glPushName");
	//drawer.drawAirspace(&manager, &table);
	
	/* Call the user's draw routine here... */
	chew_text(s, "(gl object selection)" );
	rls_str(s);

	// Restoring the original projection matrix.
	glMatrixMode(GL_PROJECTION);
	check_gl_error("glMatrixMode GL_PROJECTION");
	glPopMatrix();
	check_gl_error("glPopMatrix");
	glMatrixMode(GL_MODELVIEW);
	check_gl_error("glMatrixMode GL_MODELVIEW");
	glFlush();
	check_gl_error("glFlush");

	// Returning to normal rendering mode.
	hits = glRenderMode(GL_RENDER);

	//printf ("hits = %d\n", hits);

	// Red book example.
	// When there are multiple objects, the hits are recorded
	// in drawing order, we have to check the z values to know
	// which is the foreground object.
	z_min=100000;
	ptr = (GLuint *) selectBuf;
	for (i = 0; i < hits; i++) {
		n_names = *ptr++;
		z1= ((float)*ptr++)/0x7fffffff;
		z2= ((float)*ptr++)/0x7fffffff;

		if( z1 < z2 ) z_this = z1;
		else z_this=z2;

		if( z_this < z_min ) z_min=z_this;

		for(j=0;j<n_names;j++){
			this_hit=*ptr++;
		}
//		sprintf(ERROR_STRING,"Hit %d, %d from %g to %g, last is %d",
//			i,n_names,z1,z2,this_hit);
//		advise(ERROR_STRING);
	}
	the_hit=0;
	ptr = (GLuint *) selectBuf;
	for (i = 0; i < hits; i++) {
		n_names = *ptr++;
		z1= ((float)*ptr++)/0x7fffffff;
		z2= ((float)*ptr++)/0x7fffffff;
		if( z1 < z2 ) z_this = z1;
		else z_this=z2;
		for(j=0;j<n_names;j++){
			this_hit=*ptr++;
		}
		if( z_this == z_min )
			the_hit=this_hit;
	}
//sprintf(ERROR_STRING,"front-most hit is %d",the_hit);
//advise(ERROR_STRING);
	sprintf(ret_str,"%d",the_hit);
	assign_reserved_var("selection_index",ret_str);

	//if (hits != 0) {
	//manager.advanceTrial(processHits());
	//}

	//glPopMatrix();

	/* Set a variable to indicate what happened */
}
Пример #9
0
int default_stim(QSP_ARG_DECL  Trial_Class *tc_p,int val,Staircase *stc_p)
{
	char stim_str[256], *s;
	int coin=0;	// initialize to quiet compiler, but not necessary!?
	int rsp;
	//struct var *vp;
	Variable *vp;
	float *xv_p;

	if( is_fc ){
		coin=(int)rn(1);
		sprintf(stim_str,"%d",coin);
		assign_var("coin",stim_str);
	}

	assert( CLASS_XVAL_OBJ(tc_p) != NULL );
	xv_p = indexed_data( CLASS_XVAL_OBJ(tc_p), val );
	sprintf(stim_str,"%f",*xv_p);

	/* clip trailing zeros if there is a decimal point */
	s=stim_str;
	while( *s ){
		if( *s == '.' ){
			s=stim_str+strlen(stim_str)-1;
			while( *s == '0' ) {
				*s=0;
				s--;
			}
			/*
			 * if ONLY 0's after the decimal pt.,
			 * remove the pt too!
			 */
			if( *s == '.' ){
				*s=0;
				s--;
			}
		}
		s++;
	}

	assign_var("xval",stim_str);
	sprintf(stim_str,"%d",val);
	assign_var("val",stim_str);
	sprintf(stim_str,"%d",CLASS_INDEX(tc_p));
	assign_var("class",stim_str);

	assert( tc_p != NULL );

	//sprintf(msg_str,"Text \"%s\"",(char *)(tc_p->cl_data));
	//PUSH_INPUT_FILE(msg_str);

	//interpret_text_fragment(QSP_ARG tc_p->cl_data);		/* use chew_text??? */
	chew_text(CLASS_CMD(tc_p), "(stimulus text)");
	vp=var_of("response_string");
	if( vp != NULL )
		rsp = collect_response(VAR_VALUE(vp));
	else {
		static int warned=0;

		if( !warned ){
			warn("default_stim:  script variable $response_string not defined");
			warned=1;
		}
		rsp = collect_response("Enter response: ");
	}

	if( is_fc ){
		/* stimulus routine may have changed value of coin */
		vp=var_of("coin");
		if( vp == NULL )
			warn("variable \"coin\" not set!!!");
		else {
			if( sscanf(VAR_VALUE(vp),"%d",&coin) != 1 )
			warn("error scanning integer from variable \"coin\"\n");
		}

		/*
		if( coin ){
			if( rsp == YES ) rsp = NO;
			else if( rsp == NO ) rsp = YES;
		}
		*/
		assert( stc_p != NULL );
        
        // analyzer complains coin is a garbage value??? BUG?
		if( coin ){
			SET_STAIR_CRCT_RSP(stc_p,NO);
		} else {
			SET_STAIR_CRCT_RSP(stc_p,YES);
		}
		if( verbose ){
			if( rsp == STAIR_CRCT_RSP(stc_p) )
				advise("correct");
			else
				advise("incorrect");
		}
	}
	return(rsp);
}