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
static COMMAND_FUNC( do_cap_q ) { GLenum cap; cap = CHOOSE_CAP("capability"); if( cap == INVALID_CONSTANT ){ assign_reserved_var(CAP_RESULT_VARNAME,"-1"); return; } if( glIsEnabled(cap) == GL_TRUE ){ assign_reserved_var(CAP_RESULT_VARNAME,"1"); } else { assign_reserved_var(CAP_RESULT_VARNAME,"0"); } }
static COMMAND_FUNC( do_check_extension ) { int i; i=WHICH_ONE("GL extension",N_KNOWN_EXTENSIONS,extension_table); if( i < 0 ) return; #ifndef BUILD_FOR_OBJC if( check_extension(QSP_ARG extension_table[i]) ){ assign_reserved_var("extension_present","1"); } else { assign_reserved_var("extension_present","0"); } #else // ! BUILD_FOR_OBJC WARN("Sorry, can't check for extensions in native Apple build..."); #endif // ! BUILD_FOR_OBJC }
static COMMAND_FUNC( do_grab ) { Data_Obj *dp; CHECK_CAM if( (dp=grab_spink_cam_frame(the_cam_p )) == NULL ){ /* any error */ // We might fail because we need to release a frame... // Don't shut down in that case. WARN("do_grab: failed."); } else { char num_str[32]; // BUG - we appear to be doing this twice... sprintf(num_str,"%d",the_cam_p->skc_newest); assign_reserved_var("newest",num_str); } }
static COMMAND_FUNC( do_read_data ) /** read a data file */ { FILE *fp; const char *filename; char num_str[16]; filename=nameof("data file"); fp=try_open( filename, "r" ); if( !fp ) return; /* We used to clear the data tables here, * but now they are dynamically allocated * and cleared at that time... */ /* clear old classes */ do_delete_all_classes(SINGLE_QSP_ARG); //curr_tcp=NULL; n_have_classes=0; if( read_exp_data(QSP_ARG fp) != 0 ){ fclose(fp); sprintf(ERROR_STRING,"do_read_data: error return from read_exp_data, file %s",filename); WARN(ERROR_STRING); return; } fclose(fp); n_have_classes = eltcount(class_list()); sprintf(num_str,"%d",n_have_classes); // BUG? buffer overflow // if n_have_classes too big??? assign_reserved_var( "n_classes" , num_str ); if( verbose ){ sprintf(ERROR_STRING,"File %s read, %d classes, %d x-values", filename,n_have_classes,_nvals); advise(ERROR_STRING); } }
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 */ }