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
Makefile
......@@ -144,8 +144,8 @@ clean:
cleanall: clean
rm -f Makefile config.log config.status config.h
$(TARGET): $(APP_OBJS) $(API_OBJS)
$(LINK) -o $@ $(APP_OBJS) $(API_OBJS) $(LIBS)
$(TARGET): $(APP_OBJS) ${LIBTARGET}
$(LINK) -o $@ $(APP_OBJS) ${LIBTARGET} $(LIBS)
$(MAKEGUI)
versionstr.c: VERSION
......
......@@ -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 ) {
char ljust[4], rjust[4];
sprintf(ljust, "%.2sw", just?just:"");
sprintf(rjust, "%.2se", just?just:"");
snprintf(ljust, sizeof(ljust), "%.2sw", just?just:"");
snprintf(rjust, sizeof(rjust), "%.2se", just?just:"");
glColor3f( 1,1,1 );
glBegin( GL_LINES );
glVertex2f( 0,ybase );
......@@ -96,11 +96,11 @@ void draw_axis( float v0, float v1, float ybase, float ytick, float htext, const
glVertex2f( 1,ytick );
glEnd();
char lbl[16];
sprintf(lbl, "%.2g", v0);
snprintf(lbl, sizeof(lbl), "%.2g", v0);
Point at = { 0, ytick, 0 };
sfStrDrawTJ( lbl, htext*.8, &at, NULL, ljust );
sprintf(lbl, "%.2g", v1);
snprintf(lbl, sizeof(lbl), "%.2g", v1);
at.x[0] = 1;
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
static float rounded( int prec, float v ) {
char str[32];
sprintf(str, "%.*g", prec, v);
snprintf(str, sizeof(str), "%.*g", prec, v);
return atof(str);
}
......
......@@ -329,7 +329,7 @@ WavObj *WavObj::addObj( const char *name, const char *group )
obj = new WavObj();
*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->pt.trim(0);
......@@ -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";
} else {
if(fvp[0] >= me.pt.count) {
sprintf(errbuf,
snprintf(errbuf, sizeof(errbuf),
"There's no vertex number %d! Only have %d",
fvp[0]+1, me.pt.count);
err = errbuf;
ok = 0;
} else if(fvp[1] >= me.tx.count) {
sprintf(errbuf,
snprintf(errbuf, sizeof(errbuf),
"There's no texture-vertex number %d! Only have %d",
fvp[1]+1, me.tx.count);
err = errbuf;
ok = 0;
} else if(fvp[2] >= me.norm.count) {
sprintf(errbuf,
snprintf(errbuf, sizeof(errbuf),
"There's no surface-normal number %d! Only have %d",
fvp[2]+1, me.norm.count);
err = errbuf;
......@@ -594,16 +594,16 @@ MayaScene::MayaScene()
#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 *av[8];
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 */
// delete ap; Not if we add with findCreate()!
strcpy(reline, line);
strncpy(reline, line, relineroom);
return NULL; /* we don't consider this an error */
}
++*lno;
......@@ -634,7 +634,7 @@ const char *MayaScene::parseFileNode( const char *name, FILE *f, char *reline, i
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 *av[16];
......@@ -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->shininess = 20.;
while(fgets(line, LINESIZE, f) != NULL) {
while(fgets(line, sizeof(line)-1, f) != NULL) {
if(!isspace(line[0])) { /* End of material node */
strcpy(reline, line);
strncpy(reline, line, relineroom);
return NULL; /* we don't consider this an error */
}
++*lno;
......@@ -689,17 +689,17 @@ const char *MayaScene::parseMatNode( const char *name, FILE *f, char *reline, in
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 );
fgets(reline, sizeof(reline), f);
fgets(reline, relineroom, f);
ap->defined = -1;
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! */
fgets(reline, sizeof(reline), f);
fgets(reline, relineroom, f);
return NULL;
}
......@@ -786,14 +786,14 @@ int MayaScene::readScene( const char *scenefname, int complain )
}
}
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")
|| !strcmp(kind, "phong"))
err = parseMatNode(name, f, line, &lno, kind);
err = parseMatNode(name, f, line, sizeof(line), &lno, kind);
else if(!strcmp(kind, "shadingEngine"))
err = parseEngineNode(name, f, line, &lno);
err = parseEngineNode(name, f, line, sizeof(line), &lno);
else if(!strcmp(kind, "layeredShader"))
err = parseScrapNode(name, f, line, &lno);
err = parseScrapNode(name, f, line, sizeof(line), &lno);
else
continue; /* Ignore other createNode types */
rescan = 1;
......
......@@ -141,10 +141,10 @@ class MayaScene : public Shmem {
int readScene( const char *scenefname, int complain );
const char *parseFileNode( const char *name, FILE *f, char *line, int *lno );
const char *parseMatNode( const char *name, FILE *f, char *line, int *lno, const char *kind );
const char *parseEngineNode( const char *name, FILE *f, char *line, int *lno );
const char *parseScrapNode( 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 lineroom, int *lno, const char *kind );
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 lineroom, int *lno );
const char *parseConnect( char *from, char *to );
Appearance *partials; /* Used while parsing only */
......
......@@ -157,8 +157,18 @@ geom.umn.edu; email: software@geom.umn.edu. */
#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
#else
/* Speedy binary I/O if the machine is known to be big-endian */
# if m68k || mc68000 || mips || sparc || __hpux || AIX || ppc || __ppc__
......
......@@ -37,7 +37,7 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) {
int w = ppui.mainwin->w();
int h = ppui.mainwin->h();
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 )
w = 600;
if((h/2) > 300 )
......@@ -56,11 +56,11 @@ void pp_sldtype_cb(Fl_Menu_Button* m, void *) {
steprange.align(FL_ALIGN_BOTTOM);
//now we supply the min, max, and step values to the respective input widgets
char buf[40];
sprintf(buf, "%g", minrg[m->value()][1]);
snprintf(buf, sizeof(buf), "%g", minrg[m->value()][1]);
minrange.value(buf);
sprintf(buf, "%g", maxrg[m->value()][1]);
snprintf(buf, sizeof(buf), "%g", maxrg[m->value()][1]);
maxrange.value(buf);
sprintf(buf, "%g", steprg[m->value()][1]);
snprintf(buf, sizeof(buf), "%g", steprg[m->value()][1]);
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");
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) {
}
}
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 *pend = str+room;
if(menunum != CENSIZE && menunum != FOCALLEN)
p += sprintf(str, "[%.8s] ", parti_get_alias(ppui.st));
p += sprintf(p, linear ? "%s" : "log(%s)", sldtypetitles[menunum]);
p += snprintf(str, pend-str, "[%.8s] ", parti_get_alias(ppui.st));
p += snprintf(p, pend-p, linear ? "%s" : "log(%s)", sldtypetitles[menunum]);
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() {
......@@ -393,7 +394,7 @@ void genericslider_setparam() {
p = &temp;
slider_update(p);
if(gensliderchg == 1) {
sprintf(buf, "%f", *p);
snprintf(buf, sizeof(buf), "%f", *p);
parti_fovy(buf);
}
break;
......@@ -428,7 +429,7 @@ void genericslider_setparam() {
o->range(minrg[menunum][log_lin], maxrg[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
o->take_focus(); //so we can use the arrow keys to fine tune the slider
......@@ -444,7 +445,7 @@ void genericslider_setparam() {
}
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
maketitle( sidtitles[menunum], menunum, log_lin, o );
maketitle( sidtitles[menunum], sizeof(sidtitles[menunum]), menunum, log_lin, o );
}
if(firstdrag) {
o->label(sidtitles[menunum]);
......@@ -465,6 +466,6 @@ void gensldtimeout(void* widg) {
int menunum = ppui.sldtype->value();
int log_lin = ppui.linlog->value();
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]);
}
......@@ -150,7 +150,7 @@ const char *reportShader(void)
#endif
} else if(shaderstuff.shadername) {
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);
oom = strdup(rpt);
return oom;
......
......@@ -389,7 +389,7 @@ int pp_viewevent_cb( Fl_Gview *view, int ev ) {
ppui.snapfno = view->num.value();
view->num.has = 0;
}
fno = parti_snapshot(snapinfo);
fno = parti_snapshot(snapinfo, sizeof(snapinfo));
if(fno >= 0)
msg("Snapped %s", snapinfo);
return 1;
......@@ -997,7 +997,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi
parti_snapset( basename, frameno, size );
if(now) {
char snapinfo[1024];
if(parti_snapshot(snapinfo) >= 0)
if(parti_snapshot(snapinfo, sizeof(snapinfo)) >= 0)
msg("Snapped %s", snapinfo);
}
......@@ -1042,7 +1042,7 @@ int pp_parse_args( struct stuff **, int argc, char *argv[], char *fromfname, voi
index = parti_current_subcam();
if(index > 0) {
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);
} else {
int wx, wy;
......
......@@ -79,14 +79,15 @@ void specks_picker( Fl_Gl_Window *junk, int nhits, int nents, GLuint *hitbuf, vo
char attrs[1024];
vtfmpoint( &wpos, &bestpos, view->To2w( bestid ) );
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 {
wpostr[0] = '\0';
}
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 \"%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';
struct speck *sp = NextSpeck( bestsl->specks, bestsl, bestspeckno);
if(bestsl->text == NULL && bestst->vdesc[bestst->curdata][0].name[0] != '\0') {
......@@ -192,7 +193,7 @@ char *parti_bgcolor( const char *rgb ) {
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;
}
......@@ -314,12 +315,12 @@ char *parti_stereo( const char *ster )
}
smode = ppui.view->stereo();
sprintf(rslt, "%g %s",
snprintf(rslt, sizeof(rslt), "%g %s",
ppui.view->stereosep(),
(smode<=0||smode>=COUNT(sternames)) ? "off" : sternames[smode]);
int pixoff = ppui.view->stereooffset();
if(pixoff)
sprintf(rslt+strlen(rslt), "@%d", pixoff);
snprintf(rslt+strlen(rslt), sizeof(rslt)-strlen(rslt), "@%d", pixoff);
return rslt;
}
......@@ -438,7 +439,7 @@ void parti_detachview( const char *how ) {
char *parti_winsize( CONST char *newsize ) {
static char cursize[24];
#ifdef FLHACK
sprintf(cursize, "-1x-1");
snprintf(cursize, sizeof(cursize), "-1x-1");
#else
int posx = 0, posy = 0, has_pos = 0;
......@@ -489,7 +490,7 @@ char *parti_winsize( CONST char *newsize ) {
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
return cursize;
}
......@@ -509,7 +510,7 @@ char *parti_clip( const char *nearclip, const char *farclip ) {
parti_select_subcam( ppui.subcam ); /* recompute subcam projection */
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;
}
......@@ -569,7 +570,7 @@ int parti_snapset( char *fname, char *frameno, char *imgsize )
? 0 : sizeof(suf)-1;
if(ppui.snapfmt) Free(ppui.snapfmt);
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)
sscanf(frameno, "%d", &ppui.snapfno);
......@@ -709,7 +710,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf )
PNG_FILTER_TYPE_DEFAULT);
/* 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 );
......@@ -717,7 +718,7 @@ static int snappng( char *outfname, int xsize, int ysize, char *rgbbuf )
for(int k = 0; k < ysize; k++)
rowps[ysize-k-1] = (png_bytep) &rgbbuf[k*xsize*3];
png_write_image( png_ptr, rowps );
delete rowps;
delete[] rowps;
png_write_end(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 )
#endif /* HAVE_PNG_H */
int parti_snapshot( char *snapinfo )
int parti_snapshot( char *snapinfo, int room )
{
char tfcmd1[10240], tfcmd2[10240], *tftail;
int fail;
......@@ -778,7 +779,7 @@ int parti_snapshot( char *snapinfo )
strcpy(tfcmd1, prefix);
}
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()) {
msg("snapshot: no visible graphics window?");
return -2;
......@@ -882,11 +883,11 @@ int parti_snapshot( char *snapinfo )
if(snapinfo) {
if(fail)
sprintf(snapinfo, "failed snapping %.900s", tftail);
snprintf(snapinfo, room, "failed snapping %.900s", tftail);
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
sprintf(snapinfo, "%.1000s [%dx%d]", tftail, w, h);
snprintf(snapinfo, room, "%.1000s [%dx%d]", tftail, w, h);
}
return fail ? -1 : ppui.snapfno++;
......@@ -943,7 +944,7 @@ int parti_object( const char *objname, struct stuff **newst, int create ) {
ppui.view->picker( specks_picker, ppui.view );
ppui.view->picksize( 4*ppui.pickrange, 4*ppui.pickrange );
char tname[12];
sprintf(tname, "[g%d]", i);
snprintf(tname, sizeof(tname), "[g%d]", i);
int me = ppui.obj->add( strdup(tname) );
((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 )
index = i;
}
sprintf(tsc.name, "%.7s", name);
snprintf(tsc.name, sizeof(tsc.name), "%.7s", name);
ppui.sc[index] = tsc;
return index+1;
}
......@@ -1168,14 +1169,14 @@ int parti_select_subcam( int 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(index == 0 || index > ppui.scroom) return "";
Subcam *sc = &ppui.sc[index-1];
if(sc->name[0] == '\0') return "";
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->nleft, sc->right, sc->ndown, sc->up);
return sc->name;
......@@ -1205,7 +1206,7 @@ char *parti_subcam_list()
}
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);
}
return((tail==what) ? blank : what+1);
......@@ -1570,7 +1571,7 @@ void parti_set_speed( struct stuff *st, double speed ) {
void parti_set_timebase( struct stuff *st, double timebase ) {
char str[32];
ppui.timebasetime = timebase;
sprintf(str, "%.16lg", timebase);
snprintf(str, sizeof(str), "%.16lg", timebase);
#ifndef FLHACK
ppui.timebase->value( str );
#endif //FLHACK
......@@ -1579,7 +1580,7 @@ void parti_set_timebase( struct stuff *st, double timebase ) {
void parti_set_timestep( struct stuff *st, double timestep ) {
char str[32];
sprintf(str, "%.16lg", timestep - ppui.timebasetime);
snprintf(str, sizeof(str), "%.16lg", timestep - ppui.timebasetime);
#ifndef FLHACK
ppui.timestep->value( str );
......
......@@ -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_select_subcam( int index );
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 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 );
......@@ -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_unasyncfd( int fd );
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 void parti_detachview( CONST char *how );
#endif
......