Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • slevy/partiview
1 result
Show changes
Makedepend Makedepend
Makefile
...@@ -144,8 +144,8 @@ clean: ...@@ -144,8 +144,8 @@ clean:
cleanall: clean cleanall: clean
rm -f Makefile config.log config.status config.h rm -f Makefile config.log config.status config.h
$(TARGET): $(APP_OBJS) $(API_OBJS) $(TARGET): $(APP_OBJS) ${LIBTARGET}
$(LINK) -o $@ $(APP_OBJS) $(API_OBJS) $(LIBS) $(LINK) -o $@ $(APP_OBJS) ${LIBTARGET} $(LIBS)
$(MAKEGUI) $(MAKEGUI)
versionstr.c: VERSION versionstr.c: VERSION
......
...@@ -84,8 +84,8 @@ int Fl_Plot::next_id() const { ...@@ -84,8 +84,8 @@ int Fl_Plot::next_id() const {
void draw_axis( float v0, float v1, float ybase, float ytick, float htext, const char *just, const char *title ) { void draw_axis( float v0, float v1, float ybase, float ytick, float htext, const char *just, const char *title ) {
char ljust[4], rjust[4]; char ljust[4], rjust[4];
sprintf(ljust, "%.2sw", just?just:""); snprintf(ljust, sizeof(ljust), "%.2sw", just?just:"");
sprintf(rjust, "%.2se", just?just:""); snprintf(rjust, sizeof(rjust), "%.2se", just?just:"");
glColor3f( 1,1,1 ); glColor3f( 1,1,1 );
glBegin( GL_LINES ); glBegin( GL_LINES );
glVertex2f( 0,ybase ); glVertex2f( 0,ybase );
...@@ -96,11 +96,11 @@ void draw_axis( float v0, float v1, float ybase, float ytick, float htext, const ...@@ -96,11 +96,11 @@ void draw_axis( float v0, float v1, float ybase, float ytick, float htext, const
glVertex2f( 1,ytick ); glVertex2f( 1,ytick );
glEnd(); glEnd();
char lbl[16]; char lbl[16];
sprintf(lbl, "%.2g", v0); snprintf(lbl, sizeof(lbl), "%.2g", v0);
Point at = { 0, ytick, 0 }; Point at = { 0, ytick, 0 };
sfStrDrawTJ( lbl, htext*.8, &at, NULL, ljust ); sfStrDrawTJ( lbl, htext*.8, &at, NULL, ljust );
sprintf(lbl, "%.2g", v1); snprintf(lbl, sizeof(lbl), "%.2g", v1);
at.x[0] = 1; at.x[0] = 1;
sfStrDrawTJ( lbl, htext*.8, &at, NULL, rjust ); sfStrDrawTJ( lbl, htext*.8, &at, NULL, rjust );
...@@ -118,7 +118,7 @@ static float coordof( int pixel, int npix, float o0, float o1, float v0, float v ...@@ -118,7 +118,7 @@ static float coordof( int pixel, int npix, float o0, float o1, float v0, float v
static float rounded( int prec, float v ) { static float rounded( int prec, float v ) {
char str[32]; char str[32];
sprintf(str, "%.*g", prec, v); snprintf(str, sizeof(str), "%.*g", prec, v);
return atof(str); return atof(str);
} }
......
...@@ -329,7 +329,7 @@ WavObj *WavObj::addObj( const char *name, const char *group ) ...@@ -329,7 +329,7 @@ WavObj *WavObj::addObj( const char *name, const char *group )
obj = new WavObj(); obj = new WavObj();
*obj = *this; *obj = *this;
sprintf(fullname, group ? "%.127s:%.127s" : "%.127s", name, group); snprintf(fullname, sizeof(fullname), group ? "%.127s:%.127s" : "%.127s", name, group);
obj->name = shmstrdup(fullname); obj->name = shmstrdup(fullname);
obj->pt.trim(0); obj->pt.trim(0);
...@@ -541,19 +541,19 @@ int WavObj::readFile( const char *name, const char *fname, const char *scenename ...@@ -541,19 +541,19 @@ int WavObj::readFile( const char *name, const char *fname, const char *scenename
err = "f: expected series of NN/NN/NN (or just NN) fields for each vertex"; err = "f: expected series of NN/NN/NN (or just NN) fields for each vertex";
} else { } else {
if(fvp[0] >= me.pt.count) { if(fvp[0] >= me.pt.count) {
sprintf(errbuf, snprintf(errbuf, sizeof(errbuf),
"There's no vertex number %d! Only have %d", "There's no vertex number %d! Only have %d",
fvp[0]+1, me.pt.count); fvp[0]+1, me.pt.count);
err = errbuf; err = errbuf;
ok = 0; ok = 0;
} else if(fvp[1] >= me.tx.count) { } else if(fvp[1] >= me.tx.count) {
sprintf(errbuf, snprintf(errbuf, sizeof(errbuf),
"There's no texture-vertex number %d! Only have %d", "There's no texture-vertex number %d! Only have %d",
fvp[1]+1, me.tx.count); fvp[1]+1, me.tx.count);
err = errbuf; err = errbuf;
ok = 0; ok = 0;
} else if(fvp[2] >= me.norm.count) { } else if(fvp[2] >= me.norm.count) {
sprintf(errbuf, snprintf(errbuf, sizeof(errbuf),
"There's no surface-normal number %d! Only have %d", "There's no surface-normal number %d! Only have %d",
fvp[2]+1, me.norm.count); fvp[2]+1, me.norm.count);
err = errbuf; err = errbuf;
...@@ -594,16 +594,16 @@ MayaScene::MayaScene() ...@@ -594,16 +594,16 @@ MayaScene::MayaScene()
#define LINESIZE 1024 #define LINESIZE 1024
const char *MayaScene::parseFileNode( const char *name, FILE *f, char *reline, int *lno ) const char *MayaScene::parseFileNode( const char *name, FILE *f, char *reline, int relineroom, int *lno )
{ {
char line[LINESIZE+1], tline[LINESIZE+1]; char line[LINESIZE+1], tline[LINESIZE+1];
char *av[8]; char *av[8];
Appearance *ap = Appearance::findCreate( &this->partials, name ); Appearance *ap = Appearance::findCreate( &this->partials, name );
while(fgets(line, LINESIZE, f) != NULL) { while(fgets(line, sizeof(line)-1, f) != NULL) {
if(!isspace(line[0])) { /* Must not be our kind of "file" node -- rescan */ if(!isspace(line[0])) { /* Must not be our kind of "file" node -- rescan */
// delete ap; Not if we add with findCreate()! // delete ap; Not if we add with findCreate()!
strcpy(reline, line); strncpy(reline, line, relineroom);
return NULL; /* we don't consider this an error */ return NULL; /* we don't consider this an error */
} }
++*lno; ++*lno;
...@@ -634,7 +634,7 @@ const char *MayaScene::parseFileNode( const char *name, FILE *f, char *reline, i ...@@ -634,7 +634,7 @@ const char *MayaScene::parseFileNode( const char *name, FILE *f, char *reline, i
return "Surprise EOF"; return "Surprise EOF";
} }
const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, int *lno, const char *kind ) const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, int relineroom, int *lno, const char *kind )
{ {
char line[LINESIZE+1], tline[LINESIZE+1]; char line[LINESIZE+1], tline[LINESIZE+1];
char *av[16]; char *av[16];
...@@ -657,9 +657,9 @@ const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, in ...@@ -657,9 +657,9 @@ const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, in
ap->Cspec[0] = ap->Cspec[1] = ap->Cspec[2] = .5; ap->Cspec[0] = ap->Cspec[1] = ap->Cspec[2] = .5;
ap->shininess = 20.; ap->shininess = 20.;
while(fgets(line, LINESIZE, f) != NULL) { while(fgets(line, sizeof(line)-1, f) != NULL) {
if(!isspace(line[0])) { /* End of material node */ if(!isspace(line[0])) { /* End of material node */
strcpy(reline, line); strncpy(reline, line, relineroom);
return NULL; /* we don't consider this an error */ return NULL; /* we don't consider this an error */
} }
++*lno; ++*lno;
...@@ -689,17 +689,17 @@ const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, in ...@@ -689,17 +689,17 @@ const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, in
return NULL; return NULL;
} }
const char *MayaScene::parseScrapNode( const char *name, FILE *f, char *reline, int *lno ) { const char *MayaScene::parseScrapNode( const char *name, FILE *f, char *reline, int relineroom, int *lno ) {
Appearance *ap = Appearance::findCreate( &this->partials, name ); Appearance *ap = Appearance::findCreate( &this->partials, name );
fgets(reline, sizeof(reline), f); fgets(reline, relineroom, f);
ap->defined = -1; ap->defined = -1;
return NULL; return NULL;
} }
const char *MayaScene::parseEngineNode( const char *name, FILE *f, char *reline, int *lno ) const char *MayaScene::parseEngineNode( const char *name, FILE *f, char *reline, int relineroom, int *lno )
{ {
Appearance::findCreate( &this->aps, name ); /* just ensure node on list! */ Appearance::findCreate( &this->aps, name ); /* just ensure node on list! */
fgets(reline, sizeof(reline), f); fgets(reline, relineroom, f);
return NULL; return NULL;
} }
...@@ -786,14 +786,14 @@ int MayaScene::readScene( const char *scenefname, int complain ) ...@@ -786,14 +786,14 @@ int MayaScene::readScene( const char *scenefname, int complain )
} }
} }
if(!strcmp(kind, "file")) if(!strcmp(kind, "file"))
err = parseFileNode(name, f, line, &lno); err = parseFileNode(name, f, line, sizeof(line), &lno);
else if(!strcmp(kind, "lambert") || !strcmp(kind, "blinn") else if(!strcmp(kind, "lambert") || !strcmp(kind, "blinn")
|| !strcmp(kind, "phong")) || !strcmp(kind, "phong"))
err = parseMatNode(name, f, line, &lno, kind); err = parseMatNode(name, f, line, sizeof(line), &lno, kind);
else if(!strcmp(kind, "shadingEngine")) else if(!strcmp(kind, "shadingEngine"))
err = parseEngineNode(name, f, line, &lno); err = parseEngineNode(name, f, line, sizeof(line), &lno);
else if(!strcmp(kind, "layeredShader")) else if(!strcmp(kind, "layeredShader"))
err = parseScrapNode(name, f, line, &lno); err = parseScrapNode(name, f, line, sizeof(line), &lno);
else else
continue; /* Ignore other createNode types */ continue; /* Ignore other createNode types */
rescan = 1; rescan = 1;
......
...@@ -141,10 +141,10 @@ class MayaScene : public Shmem { ...@@ -141,10 +141,10 @@ class MayaScene : public Shmem {
int readScene( const char *scenefname, int complain ); int readScene( const char *scenefname, int complain );
const char *parseFileNode( const char *name, FILE *f, char *line, int *lno ); const char *parseFileNode( const char *name, FILE *f, char *line, int lineroom, int *lno );
const char *parseMatNode( const char *name, FILE *f, char *line, int *lno, const char *kind ); const char *parseMatNode( const char *name, FILE *f, char *line, int lineroom, int *lno, const char *kind );
const char *parseEngineNode( const char *name, FILE *f, char *line, int *lno ); const char *parseEngineNode( const char *name, FILE *f, char *line, int lineroom, int *lno );
const char *parseScrapNode( const char *name, FILE *f, char *line, int *lno ); const char *parseScrapNode( const char *name, FILE *f, char *line, int lineroom, int *lno );
const char *parseConnect( char *from, char *to ); const char *parseConnect( char *from, char *to );
Appearance *partials; /* Used while parsing only */ Appearance *partials; /* Used while parsing only */
......
...@@ -157,8 +157,18 @@ geom.umn.edu; email: software@geom.umn.edu. */ ...@@ -157,8 +157,18 @@ geom.umn.edu; email: software@geom.umn.edu. */
#undef isalnum #undef isalnum
#if WORDS_BIGENDIAN #ifdef __BYTE_ORDER__
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define AM_BIG_ENDIAN 0
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define AM_BIG_ENDIAN 1
#else
#error "Can't determine endianness of this machine -- define AM_BIG_ENDIAN to 1 or 0!"
#endif
#elif WORDS_BIGENDIAN
# define AM_BIG_ENDIAN WORDS_BIGENDIAN # define AM_BIG_ENDIAN WORDS_BIGENDIAN
#else #else
/* Speedy binary I/O if the machine is known to be big-endian */ /* Speedy binary I/O if the machine is known to be big-endian */
# if m68k || mc68000 || mips || sparc || __hpux || AIX || ppc || __ppc__ # if m68k || mc68000 || mips || sparc || __hpux || AIX || ppc || __ppc__
......
...@@ -37,7 +37,7 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) { ...@@ -37,7 +37,7 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) {
int w = ppui.mainwin->w(); int w = ppui.mainwin->w();
int h = ppui.mainwin->h(); int h = ppui.mainwin->h();
static char wtitle[50]; static char wtitle[50];
sprintf(wtitle, "%s slider parameters", sldtypetitles[m->value()]); snprintf(wtitle, sizeof(wtitle), "%s slider parameters", sldtypetitles[m->value()]);
if((w/2) > 300 ) if((w/2) > 300 )
w = 600; w = 600;
if((h/2) > 300 ) if((h/2) > 300 )
...@@ -56,11 +56,11 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) { ...@@ -56,11 +56,11 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) {
steprange.align(FL_ALIGN_BOTTOM); steprange.align(FL_ALIGN_BOTTOM);
//now we supply the min, max, and step values to the respective input widgets //now we supply the min, max, and step values to the respective input widgets
char buf[40]; char buf[40];
sprintf(buf, "%g", minrg[m->value()][1]); snprintf(buf, sizeof(buf), "%g", minrg[m->value()][1]);
minrange.value(buf); minrange.value(buf);
sprintf(buf, "%g", maxrg[m->value()][1]); snprintf(buf, sizeof(buf), "%g", maxrg[m->value()][1]);
maxrange.value(buf); maxrange.value(buf);
sprintf(buf, "%g", steprg[m->value()][1]); snprintf(buf, sizeof(buf), "%g", steprg[m->value()][1]);
steprange.value(buf); steprange.value(buf);
steprange.tooltip("The number of steps for the log slider = number of steps for the linear slider; therefore their step sizes are not equal"); steprange.tooltip("The number of steps for the log slider = number of steps for the linear slider; therefore their step sizes are not equal");
minrange.tooltip("Both log and linear sliders output the same value. Both slider types have the same minimum and maximum range."); minrange.tooltip("Both log and linear sliders output the same value. Both slider types have the same minimum and maximum range.");
...@@ -333,14 +333,15 @@ void slider_update(int* p) { ...@@ -333,14 +333,15 @@ void slider_update(int* p) {
} }
} }
static void maketitle( char *str, int menunum, int linear, Fl_Value_Slider *o ) static void maketitle( char *str, int room, int menunum, int linear, Fl_Value_Slider *o )
{ {
char *p = str; char *p = str;
char *pend = str+room;
if(menunum != CENSIZE && menunum != FOCALLEN) if(menunum != CENSIZE && menunum != FOCALLEN)
p += sprintf(str, "[%.8s] ", parti_get_alias(ppui.st)); p += snprintf(str, pend-str, "[%.8s] ", parti_get_alias(ppui.st));
p += sprintf(p, linear ? "%s" : "log(%s)", sldtypetitles[menunum]); p += snprintf(p, pend-p, linear ? "%s" : "log(%s)", sldtypetitles[menunum]);
if(o) if(o)
sprintf(p, " %.4g", linear ? o->value() : pow(10, o->value())); snprintf(p, pend-p, " %.4g", linear ? o->value() : pow(10, o->value()));
} }
void genericslider_setparam() { void genericslider_setparam() {
...@@ -393,7 +394,7 @@ void genericslider_setparam() { ...@@ -393,7 +394,7 @@ void genericslider_setparam() {
p = &temp; p = &temp;
slider_update(p); slider_update(p);
if(gensliderchg == 1) { if(gensliderchg == 1) {
sprintf(buf, "%f", *p); snprintf(buf, sizeof(buf), "%f", *p);
parti_fovy(buf); parti_fovy(buf);
} }
break; break;
...@@ -428,7 +429,7 @@ void genericslider_setparam() { ...@@ -428,7 +429,7 @@ void genericslider_setparam() {
o->range(minrg[menunum][log_lin], maxrg[menunum][log_lin]); o->range(minrg[menunum][log_lin], maxrg[menunum][log_lin]);
o->step(steprg[menunum][log_lin]); o->step(steprg[menunum][log_lin]);
maketitle( sidtitles[menunum], menunum, log_lin, o ); maketitle( sidtitles[menunum], sizeof(sidtitles[menunum]), menunum, log_lin, o );
Fl::visible_focus(1); //marx: version 0.7.02 - don't use the pre fltk-1.1.x old style of only text widgets to get keyboard focus Fl::visible_focus(1); //marx: version 0.7.02 - don't use the pre fltk-1.1.x old style of only text widgets to get keyboard focus
o->take_focus(); //so we can use the arrow keys to fine tune the slider o->take_focus(); //so we can use the arrow keys to fine tune the slider
...@@ -444,7 +445,7 @@ void genericslider_setparam() { ...@@ -444,7 +445,7 @@ void genericslider_setparam() {
} }
else { else {
//must be mouse drag or keyboard arrow key drag since slider changed value and it wasn't keyboard entered command update or mouse click on slider //must be mouse drag or keyboard arrow key drag since slider changed value and it wasn't keyboard entered command update or mouse click on slider
maketitle( sidtitles[menunum], menunum, log_lin, o ); maketitle( sidtitles[menunum], sizeof(sidtitles[menunum]), menunum, log_lin, o );
} }
if(firstdrag) { if(firstdrag) {
o->label(sidtitles[menunum]); o->label(sidtitles[menunum]);
...@@ -465,6 +466,6 @@ void gensldtimeout(void* widg) { ...@@ -465,6 +466,6 @@ void gensldtimeout(void* widg) {
int menunum = ppui.sldtype->value(); int menunum = ppui.sldtype->value();
int log_lin = ppui.linlog->value(); int log_lin = ppui.linlog->value();
struct stuff *st = ppui.st; struct stuff *st = ppui.st;
maketitle( sidtitles[menunum], menunum, log_lin, o ); maketitle( sidtitles[menunum], sizeof(sidtitles[menunum]), menunum, log_lin, o );
o->label(sidtitles[menunum]); o->label(sidtitles[menunum]);
} }
...@@ -150,7 +150,7 @@ const char *reportShader(void) ...@@ -150,7 +150,7 @@ const char *reportShader(void)
#endif #endif
} else if(shaderstuff.shadername) { } else if(shaderstuff.shadername) {
char rpt[200]; char rpt[200];
sprintf(rpt, "vertex shader %.175s loaded%s", shaderstuff.shadername, shaderstuff.enabled ? "" : "(disabled)"); snprintf(rpt, sizeof(rpt), "vertex shader %.175s loaded%s", shaderstuff.shadername, shaderstuff.enabled ? "" : "(disabled)");
if(oom) free(oom); if(oom) free(oom);
oom = strdup(rpt); oom = strdup(rpt);
return oom; return oom;
......
...@@ -389,7 +389,7 @@ int pp_viewevent_cb( Fl_Gview *view, int ev ) { ...@@ -389,7 +389,7 @@ int pp_viewevent_cb( Fl_Gview *view, int ev ) {
ppui.snapfno = view->num.value(); ppui.snapfno = view->num.value();
view->num.has = 0; view->num.has = 0;
} }
fno = parti_snapshot(snapinfo); fno = parti_snapshot(snapinfo, sizeof(snapinfo));
if(fno >= 0) if(fno >= 0)
msg("Snapped %s", snapinfo); msg("Snapped %s", snapinfo);
return 1; return 1;
...@@ -997,7 +997,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi ...@@ -997,7 +997,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi
parti_snapset( basename, frameno, size ); parti_snapset( basename, frameno, size );
if(now) { if(now) {
char snapinfo[1024]; char snapinfo[1024];
if(parti_snapshot(snapinfo) >= 0) if(parti_snapshot(snapinfo, sizeof(snapinfo)) >= 0)
msg("Snapped %s", snapinfo); msg("Snapped %s", snapinfo);
} }
...@@ -1042,7 +1042,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi ...@@ -1042,7 +1042,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi
index = parti_current_subcam(); index = parti_current_subcam();
if(index > 0) { if(index > 0) {
char params[100]; char params[100];
const char *name = parti_get_subcam( index, params ); const char *name = parti_get_subcam( index, params, sizeof(params) );
msg("subcam %.30s %.40s # az el rol L R B T // subcam -tilt %g", name, params, ppui.sctilt); msg("subcam %.30s %.40s # az el rol L R B T // subcam -tilt %g", name, params, ppui.sctilt);
} else { } else {
int wx, wy; int wx, wy;
......
...@@ -79,14 +79,15 @@ void specks_picker( Fl_Gl_Window *junk, int nhits, int nents, GLuint *hitbuf, vo ...@@ -79,14 +79,15 @@ void specks_picker( Fl_Gl_Window *junk, int nhits, int nents, GLuint *hitbuf, vo
char attrs[1024]; char attrs[1024];
vtfmpoint( &wpos, &bestpos, view->To2w( bestid ) ); vtfmpoint( &wpos, &bestpos, view->To2w( bestid ) );
if(memcmp( &wpos, &bestpos, sizeof(wpos) )) { if(memcmp( &wpos, &bestpos, sizeof(wpos) )) {
sprintf(wpostr, " (w%g %g %g)", wpos.x[0],wpos.x[1],wpos.x[2]); snprintf(wpostr, sizeof(wpostr), " (w%g %g %g)", wpos.x[0],wpos.x[1],wpos.x[2]);
} else { } else {
wpostr[0] = '\0'; wpostr[0] = '\0';
} }
vtfmpoint( &cpos, &wpos, view->Tw2c() ); vtfmpoint( &cpos, &wpos, view->Tw2c() );
strcpy(fmt, bestsl->bytesperspeck <= SMALLSPECKSIZE(MAXVAL) strncpy(fmt, bestsl->bytesperspeck <= SMALLSPECKSIZE(MAXVAL)
? "[g%d]%sPicked %g %g %g%s%.0s @%g (of %d)%s" ? "[g%d]%sPicked %g %g %g%s%.0s @%g (of %d)%s"
: "[g%d]%sPicked %g %g %g%s \"%s\" @%g (of %d)%s"); : "[g%d]%sPicked %g %g %g%s \"%s\" @%g (of %d)%s", sizeof(fmt));
fmt[sizeof(fmt)-1] = '\0';
attrs[0] = '\0'; attrs[0] = '\0';
struct speck *sp = NextSpeck( bestsl->specks, bestsl, bestspeckno); struct speck *sp = NextSpeck( bestsl->specks, bestsl, bestspeckno);
if(bestsl->text == NULL && bestst->vdesc[bestst->curdata][0].name[0] != '\0') { if(bestsl->text == NULL && bestst->vdesc[bestst->curdata][0].name[0] != '\0') {
...@@ -192,7 +193,7 @@ char *parti_bgcolor( const char *rgb ) { ...@@ -192,7 +193,7 @@ char *parti_bgcolor( const char *rgb ) {
ppui.view->bgcolor( &bgcolor ); ppui.view->bgcolor( &bgcolor );
} }
sprintf(bgc, "%.3f %.3f %.3f", bgcolor.x[0],bgcolor.x[1],bgcolor.x[2]); snprintf(bgc, sizeof(bgc), "%.3f %.3f %.3f", bgcolor.x[0],bgcolor.x[1],bgcolor.x[2]);
return bgc; return bgc;
} }
...@@ -314,12 +315,12 @@ char *parti_stereo( const char *ster ) ...@@ -314,12 +315,12 @@ char *parti_stereo( const char *ster )
} }
smode = ppui.view->stereo(); smode = ppui.view->stereo();
sprintf(rslt, "%g %s", snprintf(rslt, sizeof(rslt), "%g %s",
ppui.view->stereosep(), ppui.view->stereosep(),
(smode<=0||smode>=COUNT(sternames)) ? "off" : sternames[smode]); (smode<=0||smode>=COUNT(sternames)) ? "off" : sternames[smode]);
int pixoff = ppui.view->stereooffset(); int pixoff = ppui.view->stereooffset();
if(pixoff) if(pixoff)
sprintf(rslt+strlen(rslt), "@%d", pixoff); snprintf(rslt+strlen(rslt), sizeof(rslt)-strlen(rslt), "@%d", pixoff);
return rslt; return rslt;
} }
...@@ -438,7 +439,7 @@ void parti_detachview( const char *how ) { ...@@ -438,7 +439,7 @@ void parti_detachview( const char *how ) {
char *parti_winsize( CONST char *newsize ) { char *parti_winsize( CONST char *newsize ) {
static char cursize[24]; static char cursize[24];
#ifdef FLHACK #ifdef FLHACK
sprintf(cursize, "-1x-1"); snprintf(cursize, sizeof(cursize), "-1x-1");
#else #else
int posx = 0, posy = 0, has_pos = 0; int posx = 0, posy = 0, has_pos = 0;
...@@ -489,7 +490,7 @@ char *parti_winsize( CONST char *newsize ) { ...@@ -489,7 +490,7 @@ char *parti_winsize( CONST char *newsize ) {
return parti_winsize(NULL); return parti_winsize(NULL);
} }
} }
sprintf(cursize, has_pos ? "%dx%d+%d+%d" : "%dx%d", ox, oy, posx, posy); snprintf(cursize, sizeof(cursize), has_pos ? "%dx%d+%d+%d" : "%dx%d", ox, oy, posx, posy);
#endif #endif
return cursize; return cursize;
} }
...@@ -509,7 +510,7 @@ char *parti_clip( const char *nearclip, const char *farclip ) { ...@@ -509,7 +510,7 @@ char *parti_clip( const char *nearclip, const char *farclip ) {
parti_select_subcam( ppui.subcam ); /* recompute subcam projection */ parti_select_subcam( ppui.subcam ); /* recompute subcam projection */
static char why[16]; static char why[16];
sprintf(why, "clip %.4g %.4g", ppui.view->nearclip(), ppui.view->farclip()); snprintf(why, sizeof(why), "clip %.4g %.4g", ppui.view->nearclip(), ppui.view->farclip());
return why; return why;
} }
...@@ -569,7 +570,7 @@ int parti_snapset( char *fname, char *frameno, char *imgsize ) ...@@ -569,7 +570,7 @@ int parti_snapset( char *fname, char *frameno, char *imgsize )
? 0 : sizeof(suf)-1; ? 0 : sizeof(suf)-1;
if(ppui.snapfmt) Free(ppui.snapfmt); if(ppui.snapfmt) Free(ppui.snapfmt);
ppui.snapfmt = NewN(char, len+needsuf+1); ppui.snapfmt = NewN(char, len+needsuf+1);
sprintf(ppui.snapfmt, needsuf ? "%s%s" : "%s", fname, suf); snprintf(ppui.snapfmt, len+needsuf+1, needsuf ? "%s%s" : "%s", fname, suf);
} }
if(frameno) if(frameno)
sscanf(frameno, "%d", &ppui.snapfno); sscanf(frameno, "%d", &ppui.snapfno);
...@@ -709,7 +710,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf ) ...@@ -709,7 +710,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf )
PNG_FILTER_TYPE_DEFAULT); PNG_FILTER_TYPE_DEFAULT);
/* Don't really know that we're in sRGB color space, but let's say so anyway. */ /* Don't really know that we're in sRGB color space, but let's say so anyway. */
png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, PNG_INFO_sRGB); // png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, PNG_INFO_sRGB);
png_write_info( png_ptr, info_ptr ); png_write_info( png_ptr, info_ptr );
...@@ -717,7 +718,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf ) ...@@ -717,7 +718,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf )
for(int k = 0; k < ysize; k++) for(int k = 0; k < ysize; k++)
rowps[ysize-k-1] = (png_bytep) &rgbbuf[k*xsize*3]; rowps[ysize-k-1] = (png_bytep) &rgbbuf[k*xsize*3];
png_write_image( png_ptr, rowps ); png_write_image( png_ptr, rowps );
delete rowps; delete[] rowps;
png_write_end(png_ptr, info_ptr); png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr);
...@@ -728,7 +729,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf ) ...@@ -728,7 +729,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf )
#endif /* HAVE_PNG_H */ #endif /* HAVE_PNG_H */
int parti_snapshot( char *snapinfo ) int parti_snapshot( char *snapinfo, int room )
{ {
char tfcmd1[10240], tfcmd2[10240], *tftail; char tfcmd1[10240], tfcmd2[10240], *tftail;
int fail; int fail;
...@@ -778,7 +779,7 @@ int parti_snapshot( char *snapinfo ) ...@@ -778,7 +779,7 @@ int parti_snapshot( char *snapinfo )
strcpy(tfcmd1, prefix); strcpy(tfcmd1, prefix);
} }
tftail = tfcmd1+strlen(tfcmd1); tftail = tfcmd1+strlen(tfcmd1);
sprintf(tftail, ppui.snapfmt, ppui.snapfno); snprintf(tftail, tftail+sizeof(tfcmd1)-tftail, ppui.snapfmt, ppui.snapfno);
if(!ppui.view || !ppui.view->visible_r()) { if(!ppui.view || !ppui.view->visible_r()) {
msg("snapshot: no visible graphics window?"); msg("snapshot: no visible graphics window?");
return -2; return -2;
...@@ -882,11 +883,11 @@ int parti_snapshot( char *snapinfo ) ...@@ -882,11 +883,11 @@ int parti_snapshot( char *snapinfo )
if(snapinfo) { if(snapinfo) {
if(fail) if(fail)
sprintf(snapinfo, "failed snapping %.900s", tftail); snprintf(snapinfo, room, "failed snapping %.900s", tftail);
else if(snapstereo) else if(snapstereo)
sprintf(snapinfo, "%.1000s [%dx%d] @ => stereo L,R", tftail, w, h); snprintf(snapinfo, room, "%.1000s [%dx%d] @ => stereo L,R", tftail, w, h);
else else
sprintf(snapinfo, "%.1000s [%dx%d]", tftail, w, h); snprintf(snapinfo, room, "%.1000s [%dx%d]", tftail, w, h);
} }
return fail ? -1 : ppui.snapfno++; return fail ? -1 : ppui.snapfno++;
...@@ -943,7 +944,7 @@ int parti_object( const char *objname, struct stuff **newst, int create ) { ...@@ -943,7 +944,7 @@ int parti_object( const char *objname, struct stuff **newst, int create ) {
ppui.view->picker( specks_picker, ppui.view ); ppui.view->picker( specks_picker, ppui.view );
ppui.view->picksize( 4*ppui.pickrange, 4*ppui.pickrange ); ppui.view->picksize( 4*ppui.pickrange, 4*ppui.pickrange );
char tname[12]; char tname[12];
sprintf(tname, "[g%d]", i); snprintf(tname, sizeof(tname), "[g%d]", i);
int me = ppui.obj->add( strdup(tname) ); int me = ppui.obj->add( strdup(tname) );
((Fl_Menu_Item *)ppui.obj->menu())[me].labelcolor( ppui.obj->labelcolor() ); ((Fl_Menu_Item *)ppui.obj->menu())[me].labelcolor( ppui.obj->labelcolor() );
...@@ -1131,7 +1132,7 @@ int parti_make_subcam( CONST char *name, int argc, char **params ) ...@@ -1131,7 +1132,7 @@ int parti_make_subcam( CONST char *name, int argc, char **params )
index = i; index = i;
} }
sprintf(tsc.name, "%.7s", name); snprintf(tsc.name, sizeof(tsc.name), "%.7s", name);
ppui.sc[index] = tsc; ppui.sc[index] = tsc;
return index+1; return index+1;
} }
...@@ -1168,14 +1169,14 @@ int parti_select_subcam( int index ) ...@@ -1168,14 +1169,14 @@ int parti_select_subcam( int index )
return index; return index;
} }
const char *parti_get_subcam( int index, char *paramsp ) const char *parti_get_subcam( int index, char *paramsp, int room )
{ {
if(paramsp) paramsp[0] = '\0'; if(paramsp) paramsp[0] = '\0';
if(index == 0 || index > ppui.scroom) return ""; if(index == 0 || index > ppui.scroom) return "";
Subcam *sc = &ppui.sc[index-1]; Subcam *sc = &ppui.sc[index-1];
if(sc->name[0] == '\0') return ""; if(sc->name[0] == '\0') return "";
if(paramsp) if(paramsp)
sprintf(paramsp, "%g %g %g %g %g %g %g", snprintf(paramsp, room, "%g %g %g %g %g %g %g",
sc->azim, sc->elev, sc->roll, sc->azim, sc->elev, sc->roll,
sc->nleft, sc->right, sc->ndown, sc->up); sc->nleft, sc->right, sc->ndown, sc->up);
return sc->name; return sc->name;
...@@ -1205,7 +1206,7 @@ char *parti_subcam_list() ...@@ -1205,7 +1206,7 @@ char *parti_subcam_list()
} }
for(i = 0, tail = what; i < ppui.scroom && ppui.sc[i].name[0] != '\0'; i++) { for(i = 0, tail = what; i < ppui.scroom && ppui.sc[i].name[0] != '\0'; i++) {
sprintf(tail, " %s", ppui.sc[i].name); snprintf(tail, what+whatroom - tail, " %s", ppui.sc[i].name);
tail += strlen(tail); tail += strlen(tail);
} }
return((tail==what) ? blank : what+1); return((tail==what) ? blank : what+1);
...@@ -1570,7 +1571,7 @@ void parti_set_speed( struct stuff *st, double speed ) { ...@@ -1570,7 +1571,7 @@ void parti_set_speed( struct stuff *st, double speed ) {
void parti_set_timebase( struct stuff *st, double timebase ) { void parti_set_timebase( struct stuff *st, double timebase ) {
char str[32]; char str[32];
ppui.timebasetime = timebase; ppui.timebasetime = timebase;
sprintf(str, "%.16lg", timebase); snprintf(str, sizeof(str), "%.16lg", timebase);
#ifndef FLHACK #ifndef FLHACK
ppui.timebase->value( str ); ppui.timebase->value( str );
#endif //FLHACK #endif //FLHACK
...@@ -1579,7 +1580,7 @@ void parti_set_timebase( struct stuff *st, double timebase ) { ...@@ -1579,7 +1580,7 @@ void parti_set_timebase( struct stuff *st, double timebase ) {
void parti_set_timestep( struct stuff *st, double timestep ) { void parti_set_timestep( struct stuff *st, double timestep ) {
char str[32]; char str[32];
sprintf(str, "%.16lg", timestep - ppui.timebasetime); snprintf(str, sizeof(str), "%.16lg", timestep - ppui.timebasetime);
#ifndef FLHACK #ifndef FLHACK
ppui.timestep->value( str ); ppui.timestep->value( str );
......
...@@ -92,7 +92,7 @@ extern int parti_make_subcam( CONST char *name, int argc, char **params ); ...@@ -92,7 +92,7 @@ extern int parti_make_subcam( CONST char *name, int argc, char **params );
extern int parti_subcam_named( CONST char *name ); extern int parti_subcam_named( CONST char *name );
extern int parti_select_subcam( int index ); extern int parti_select_subcam( int index );
extern char *parti_subcam_list( void ); extern char *parti_subcam_list( void );
extern CONST char *parti_get_subcam( int index, char *paramsp100 ); extern CONST char *parti_get_subcam( int index, char *paramsp100, int room );
extern int parti_current_subcam( void ); extern int parti_current_subcam( void );
extern struct Fl_Plot *parti_register_plot( struct stuff *st, void (*draw)(struct Fl_Plot *, void *obj, void *arg), void *arg ); extern struct Fl_Plot *parti_register_plot( struct stuff *st, void (*draw)(struct Fl_Plot *, void *obj, void *arg), void *arg );
extern void parti_hrdiag_on( int on ); extern void parti_hrdiag_on( int on );
...@@ -104,7 +104,7 @@ extern int getfloats( float *v, int nfloats, int arg0, int argc, char **argv ); ...@@ -104,7 +104,7 @@ extern int getfloats( float *v, int nfloats, int arg0, int argc, char **argv );
extern void parti_asyncfd( int fd ); extern void parti_asyncfd( int fd );
extern void parti_unasyncfd( int fd ); extern void parti_unasyncfd( int fd );
extern int parti_snapset( char *basename, char *frameno, char *imgsize ); extern int parti_snapset( char *basename, char *frameno, char *imgsize );
extern int parti_snapshot( char *snapinfo ); extern int parti_snapshot( char *snapinfo, int room );
extern float parti_pickrange( char *newrange ); extern float parti_pickrange( char *newrange );
extern void parti_detachview( CONST char *how ); extern void parti_detachview( CONST char *how );
#endif #endif
......