int pick_framerate(QSP_ARG_DECL PGR_Cam *pgcp,const char *pmpt) { int i; int j; dc1394framerates_t framerates; const char **choices; const char *s; if( pgcp == NULL ) return -1; // format7 doesn't have a framerate!? if( mode_is_format7(pgcp) ){ WARN("Can't specify framerate for format7 video mode..."); // eat the argument s = NAMEOF("dummy argument"); return -1; } if ( dc1394_video_get_supported_framerates( pgcp->pc_cam_p, pgcp->pc_video_mode, &framerates ) != DC1394_SUCCESS ) return -1; choices = (const char **) getbuf( framerates.num * sizeof(char *) ); j=0; for(i=0;i<framerates.num;i++){ s=name_for_framerate(framerates.framerates[i]); if( s != NULL ){ choices[j] = s; j++; } } i=WHICH_ONE(pmpt,j,choices); givbuf(choices); return(i); }
static COMMAND_FUNC( do_set_fmt ) { int i; if( ! fmt_names_inited ) init_print_fmt_names(); i = WHICH_ONE("format",N_PRINT_FORMATS,print_fmt_name); if( i < 0 ) return; set_integer_print_fmt(QSP_ARG (Number_Fmt)i); }
static COMMAND_FUNC( do_gl_material ) { int i; float pvec[4]; i=WHICH_ONE("property",N_MATERIAL_PROPERTIES,property_names); if( i < 0 ) return; switch(i){ case 0: { pvec[0] = (float)HOW_MUCH("ambient red"); pvec[1] = (float)HOW_MUCH("ambient green"); pvec[2] = (float)HOW_MUCH("ambient blue"); pvec[3] = (float)HOW_MUCH("ambient alpha"); if( debug & gl_debug ) advise("glMaterialfv GL_FRONT_AND_BACK GL_DIFFUSE (ambient?)"); /* diffuse or ambient??? */ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pvec); break; } case 1: { pvec[0] = (float)HOW_MUCH("diffuse red"); pvec[1] = (float)HOW_MUCH("diffuse green"); pvec[2] = (float)HOW_MUCH("diffuse blue"); pvec[3] = (float)HOW_MUCH("diffuse alpha"); if( debug & gl_debug ) advise("glMaterialfv GL_FRONT_AND_BACK GL_DUFFUSE"); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pvec); break; } case 2: { pvec[0] = (float)HOW_MUCH("specular red"); pvec[1] = (float)HOW_MUCH("specular green"); pvec[2] = (float)HOW_MUCH("specular blue"); pvec[3] = (float)HOW_MUCH("specular alpha"); if( debug & gl_debug ) advise("glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR"); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, pvec); break; } case 3: { pvec[0] = (float)HOW_MUCH("shininess"); if( debug & gl_debug ) advise("glMaterialfv GL_FRONT_AND_BACK GL_SHININESS"); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, pvec); break; } case 4: pvec[0] = (float)HOW_MUCH("emission red"); pvec[1] = (float)HOW_MUCH("emission green"); pvec[2] = (float)HOW_MUCH("emission blue"); pvec[2] = (float)HOW_MUCH("emission alpha"); if( debug & gl_debug ) advise("glMaterialfv GL_FRONT_AND_BACK GL_EMISSION"); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, pvec); break; default: error1("do_gl_material: bad property (shouldn't happen)"); break; } }
static COMMAND_FUNC( select_shader ) { int i; i=WHICH_ONE("shading model",N_SHADING_MODELS,shading_models); if( i < 0 ) return; if( debug & gl_debug ) advise("glShadeModel"); switch(i){ case 0: glShadeModel(GL_FLAT); break; case 1: glShadeModel(GL_SMOOTH); break; } }
static COMMAND_FUNC( set_atten ) { int i; float f; i=WHICH_ONE("attenuation model",N_ATTENUATIONS,atten_names); f=(float)HOW_MUCH("attenuation constant"); if( i < 0 ) return; if( debug & gl_debug ) advise("glLightf"); switch(i){ case 0: glLightf(which_light,GL_CONSTANT_ATTENUATION,f); break; case 1: glLightf(which_light,GL_LINEAR_ATTENUATION,f); break; case 2: glLightf(which_light,GL_QUADRATIC_ATTENUATION,f); break; } }
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_ilace ) { const char *obj_name; Data_Obj *dp, *newdp; int parity; obj_name=NAMEOF("name for subimage"); dp=get_img( QSP_ARG NAMEOF("name of parent image") ); if( dp==NULL ) return; parity=WHICH_ONE("parity of selected lines",2,parlist); if( parity < 0 ) return; newdp=mk_ilace(dp,obj_name,parity); if( newdp == NULL ) warn("couldn't create interlaced subimage"); }
static COMMAND_FUNC( do_newpipe ) { const char *pipe_name; const char *cmd; const char *mode; int n; pipe_name=NAMEOF("name for pipe"); n=WHICH_ONE("read/write",N_RW_CHOICES,rw_choices); cmd=NAMEOF("command"); if( n < 0 || n >= 2 ) return; if( n == 0 ) mode="r"; else mode="w"; creat_pipe(QSP_ARG pipe_name,cmd,mode); }
dc1394video_mode_t pick_fmt7_mode(QSP_ARG_DECL PGR_Cam *pgcp,const char *pmpt) { int i; int j,k; dc1394video_modes_t video_modes; const char **choices; dc1394video_mode_t * modelist; dc1394video_mode_t m; if( pgcp == NULL ) return BAD_VIDEO_MODE; if ( dc1394_video_get_supported_modes( pgcp->pc_cam_p, &video_modes ) != DC1394_SUCCESS ) return BAD_VIDEO_MODE; choices = (const char **)getbuf( video_modes.num * sizeof(char *) ); modelist = (dc1394video_mode_t *) getbuf( video_modes.num * sizeof(dc1394video_mode_t) ); j=0; for(i=0;i<video_modes.num;i++){ k=index_of_video_mode(video_modes.modes[i]); /* get index into our table... */ /* could probably get this by subtraction if * our table is in the correct order... */ if( k >= 0 && video_modes.modes[i] >= DC1394_VIDEO_MODE_FORMAT7_0 && video_modes.modes[i] <= DC1394_VIDEO_MODE_FORMAT7_7 ){ choices[j] = all_video_modes[k].nvm_name; modelist[j] = all_video_modes[k].nvm_mode; j++; } } i=WHICH_ONE(pmpt,j,choices); givbuf(choices); if( i >= 0 ) m=modelist[i]; else m=BAD_VIDEO_MODE; givbuf(modelist); return(m); }
dc1394video_mode_t pick_video_mode(QSP_ARG_DECL PGR_Cam *pgcp,const char *pmpt) { int i; int j,k; const char **choices; dc1394video_mode_t * modelist; dc1394video_mode_t m; if( pgcp == NULL ) return BAD_VIDEO_MODE; choices = (const char **)getbuf( pgcp->pc_video_modes.num * sizeof(char *) ); modelist = (dc1394video_mode_t *) getbuf( pgcp->pc_video_modes.num * sizeof(dc1394video_mode_t) ); j=0; for(i=0;i<pgcp->pc_video_modes.num;i++){ /* get index into our table... */ /* could probably get this by subtraction if * our table is in the correct order... */ k=index_of_video_mode(pgcp->pc_video_modes.modes[i]); if( k >= 0 ){ choices[j] = all_video_modes[k].nvm_name; modelist[j] = all_video_modes[k].nvm_mode; j++; } } i=WHICH_ONE(pmpt,j,choices); givbuf(choices); if( i >= 0 ) m=modelist[i]; else m=BAD_VIDEO_MODE; givbuf(modelist); return(m); }