diff options
Diffstat (limited to 'blinkenlights.c')
-rw-r--r-- | blinkenlights.c | 1122 |
1 files changed, 570 insertions, 552 deletions
diff --git a/blinkenlights.c b/blinkenlights.c index 177cb30..c9f0a81 100644 --- a/blinkenlights.c +++ b/blinkenlights.c @@ -31,7 +31,7 @@ //this is to remember the frame positions in the .blm file //"static void blinkenlights_goto(t_blinkenlights* x, t_float frame)" -//with a "goto $1" message, you can stratch the blm film. note that the +//with a "goto $1" message, you can stratch the blm film. note that the //range of $1 is 0 to 1 @@ -115,475 +115,492 @@ typedef struct _blinkenlights t_int *x_frame; /* frame contents */ t_clock *x_clock; /* clock used for reading frames */ t_outlet *outlet_bang; - t_int frame_no; + t_int frame_no; t_int frame_pos[BL_MAX_LENGTH]; t_clock *x_clock2; t_int x_timer2; t_float frame_inc; - + } t_blinkenlights; static void blinkenlights_close(t_blinkenlights *x); - /* clean up */ -static void blinkenlights_free(t_blinkenlights *x) +/* clean up */ +static void blinkenlights_free(t_blinkenlights *x) { - post( "blinkenlights : freeing colors" ); - if ( x->x_background ) freebytes( x->x_background, 8 ); - if ( x->x_foreground ) freebytes( x->x_foreground, 8 ); - post( "blinkenlights : closing file" ); - blinkenlights_close(x); - post( "blinkenlights : cancelling clock" ); - if ( x->x_clock != NULL ) - { - clock_unset( x->x_clock ); - clock_free( x->x_clock ); - } - if ( x->x_clock2 != NULL ) - { - clock_unset( x->x_clock2 ); - clock_free( x->x_clock2 ); - } - post( "blinkenlights : done" ); + post( "blinkenlights : freeing colors" ); + if ( x->x_background ) freebytes( x->x_background, 8 ); + if ( x->x_foreground ) freebytes( x->x_foreground, 8 ); + post( "blinkenlights : closing file" ); + blinkenlights_close(x); + post( "blinkenlights : cancelling clock" ); + if ( x->x_clock != NULL ) + { + clock_unset( x->x_clock ); + clock_free( x->x_clock ); + } + if ( x->x_clock2 != NULL ) + { + clock_unset( x->x_clock2 ); + clock_free( x->x_clock2 ); + } + post( "blinkenlights : done" ); } static void *blinkenlights_new(t_float fwidth, t_float fheight, t_float fxpixsize, t_float fypixsize ) { - t_blinkenlights *x = (t_blinkenlights *)pd_new(blinkenlights_class); - if ( fwidth <= 0 ) { - post( "blinkenlights: wrong creation argument : width : %f", fwidth ); - return NULL; - } - if ( fheight <= 0 ) { - post( "blinkenlights: wrong creation argument : height : %f", fheight ); - return NULL; - } - if ( fxpixsize <= 0 ) { - post( "blinkenlights: wrong creation argument : x pixel size : %f", fxpixsize ); - return NULL; - } - if ( fypixsize <= 0 ) { - post( "blinkenlights: wrong creation argument : y pixel size : %f", fypixsize ); - return NULL; - } - x->x_width = (int) fwidth; - x->x_height = (int) fheight; - x->x_xsize = (int) fxpixsize; - x->x_ysize = (int) fypixsize; - x->x_ecanvas = 0; - x->x_filed = NULL; - x->x_frame = NULL; - x->x_clock = NULL; - x->x_glist = (t_glist *) canvas_getcurrent(); - x->x_background = (char*) getbytes( 8 ); - strncpy( x->x_background, BL_BACKGROUND_COLOR, 7 ); - x->x_background[7] = '\0'; - x->x_foreground = (char*) getbytes( 8 ); - strncpy( x->x_foreground, BL_FOREGROUND_COLOR, 7 ); - x->x_foreground[7] = '\0'; - x->x_timer2 = 40; - x->frame_inc = 0; - - x->outlet_bang = outlet_new(&x->x_obj, &s_bang); - - return(x); + t_blinkenlights *x = (t_blinkenlights *)pd_new(blinkenlights_class); + if ( fwidth <= 0 ) + { + post( "blinkenlights: wrong creation argument : width : %f", fwidth ); + return NULL; + } + if ( fheight <= 0 ) + { + post( "blinkenlights: wrong creation argument : height : %f", fheight ); + return NULL; + } + if ( fxpixsize <= 0 ) + { + post( "blinkenlights: wrong creation argument : x pixel size : %f", fxpixsize ); + return NULL; + } + if ( fypixsize <= 0 ) + { + post( "blinkenlights: wrong creation argument : y pixel size : %f", fypixsize ); + return NULL; + } + x->x_width = (int) fwidth; + x->x_height = (int) fheight; + x->x_xsize = (int) fxpixsize; + x->x_ysize = (int) fypixsize; + x->x_ecanvas = 0; + x->x_filed = NULL; + x->x_frame = NULL; + x->x_clock = NULL; + x->x_glist = (t_glist *) canvas_getcurrent(); + x->x_background = (char*) getbytes( 8 ); + strncpy( x->x_background, BL_BACKGROUND_COLOR, 7 ); + x->x_background[7] = '\0'; + x->x_foreground = (char*) getbytes( 8 ); + strncpy( x->x_foreground, BL_FOREGROUND_COLOR, 7 ); + x->x_foreground[7] = '\0'; + x->x_timer2 = 40; + x->frame_inc = 0; + + x->outlet_bang = outlet_new(&x->x_obj, &s_bang); + + return(x); } static void blinkenlights_draw_new(t_blinkenlights* x) { - t_canvas *canvas=glist_getcanvas(x->x_glist); - t_int xi, yi; + t_canvas *canvas=glist_getcanvas(x->x_glist); + t_int xi, yi; - SYS_VGUI4("toplevel .x%lx -width %d -height %d -borderwidth 0 -background #000000\n", x, - x->x_width*x->x_xsize, x->x_height*x->x_ysize ); - SYS_VGUI2("frame .x%lx.m -relief raised -bd 2\n", x); - SYS_VGUI2("wm title .x%lx blinkenlights\n", x); + SYS_VGUI4("toplevel .x%lx -width %d -height %d -borderwidth 0 -background #000000\n", x, + x->x_width*x->x_xsize, x->x_height*x->x_ysize ); + SYS_VGUI2("frame .x%lx.m -relief raised -bd 2\n", x); + SYS_VGUI2("wm title .x%lx blinkenlights\n", x); - SYS_VGUI4("canvas .x%lx.c -width %d -height %d\n", - x, - x->x_width*x->x_xsize, x->x_height*x->x_ysize ); - x->x_ecanvas = 1; + SYS_VGUI4("canvas .x%lx.c -width %d -height %d\n", + x, + x->x_width*x->x_xsize, x->x_height*x->x_ysize ); + x->x_ecanvas = 1; - for ( xi=1; xi<=x->x_width; xi++ ) - { - for ( yi=1; yi<=x->x_height; yi++ ) + for ( xi=1; xi<=x->x_width; xi++ ) { - SYS_VGUI10(".x%lx.c create rectangle %d %d %d %d -fill %s -outline #555555 -tags %xPIX%.5d%.5d\n", - x, - (xi-1)*x->x_xsize, (yi-1)*x->x_ysize, - xi*x->x_xsize, yi*x->x_ysize, - x->x_background, - x, xi, yi); + for ( yi=1; yi<=x->x_height; yi++ ) + { + SYS_VGUI10(".x%lx.c create rectangle %d %d %d %d -fill %s -outline #555555 -tags %xPIX%.5d%.5d\n", + x, + (xi-1)*x->x_xsize, (yi-1)*x->x_ysize, + xi*x->x_xsize, yi*x->x_ysize, + x->x_background, + x, xi, yi); + } } - } - SYS_VGUI2("pack .x%lx.c -side left -expand 1 -fill both\n", x); - SYS_VGUI2("pack .x%lx.m -side top -fill x\n", x); - SYS_VGUI2("wm geometry .x%lx +0+0\n", x); - SYS_VGUI2("wm geometry .x%lx +0+0\n", x); + SYS_VGUI2("pack .x%lx.c -side left -expand 1 -fill both\n", x); + SYS_VGUI2("pack .x%lx.m -side top -fill x\n", x); + SYS_VGUI2("wm geometry .x%lx +0+0\n", x); + SYS_VGUI2("wm geometry .x%lx +0+0\n", x); } static void blinkenlights_create(t_blinkenlights* x) { - if ( x->x_ecanvas ) - { - post("blinkenlights : create : canvas already exists" ); - return; - } + if ( x->x_ecanvas ) + { + post("blinkenlights : create : canvas already exists" ); + return; + } - blinkenlights_draw_new(x); + blinkenlights_draw_new(x); } static void blinkenlights_erase(t_blinkenlights* x) { - t_canvas *canvas=glist_getcanvas(x->x_glist); - t_int xi, yi; + t_canvas *canvas=glist_getcanvas(x->x_glist); + t_int xi, yi; - for ( xi=1; xi<=x->x_width; xi++ ) - { - for ( yi=1; yi<=x->x_height; yi++ ) + for ( xi=1; xi<=x->x_width; xi++ ) { - SYS_VGUI5(".x%lx.c delete %xPIX%.5d%.5d\n", x, x, xi, yi); + for ( yi=1; yi<=x->x_height; yi++ ) + { + SYS_VGUI5(".x%lx.c delete %xPIX%.5d%.5d\n", x, x, xi, yi); + } } - } - SYS_VGUI2("destroy .x%lx\n", x); - x->x_ecanvas=0; + SYS_VGUI2("destroy .x%lx\n", x); + x->x_ecanvas=0; } static void blinkenlights_destroy(t_blinkenlights* x) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : destroy : canvas does not exist" ); - return; - } + if ( !x->x_ecanvas ) + { + post("blinkenlights : destroy : canvas does not exist" ); + return; + } - blinkenlights_erase(x); + blinkenlights_erase(x); } static void blinkenlights_width(t_blinkenlights* x, t_float fwidth) { - if ( fwidth <= 0 ) { - post( "blinkenlights~: wrong width : ignored" ); - return; - } else { - if ( x->x_width == (int)fwidth ) return; - x->x_width=(int)fwidth; - } - if (x->x_ecanvas) blinkenlights_erase( x ); - blinkenlights_draw_new( x ); + if ( fwidth <= 0 ) + { + post( "blinkenlights~: wrong width : ignored" ); + return; + } + else + { + if ( x->x_width == (int)fwidth ) return; + x->x_width=(int)fwidth; + } + if (x->x_ecanvas) blinkenlights_erase( x ); + blinkenlights_draw_new( x ); } static void blinkenlights_height(t_blinkenlights* x, t_float fheight) { - if ( fheight <= 0 ) { - post( "blinkenlights~: wrong height : ignored" ); - return; - } else { - if ( x->x_height == (int)fheight ) return; - x->x_height=(int)fheight; - } - if (x->x_ecanvas) blinkenlights_erase( x ); - blinkenlights_draw_new( x ); + if ( fheight <= 0 ) + { + post( "blinkenlights~: wrong height : ignored" ); + return; + } + else + { + if ( x->x_height == (int)fheight ) return; + x->x_height=(int)fheight; + } + if (x->x_ecanvas) blinkenlights_erase( x ); + blinkenlights_draw_new( x ); } static void blinkenlights_xsize(t_blinkenlights* x, t_float fxsize) { - if ( fxsize <= 0 ) { - post( "blinkenlights~: wrong x pixel size : ignored" ); - return; - } else { - if ( x->x_xsize == (int)fxsize ) return; - x->x_xsize=(int)fxsize; - } - if (x->x_ecanvas) blinkenlights_erase( x ); - blinkenlights_draw_new( x ); + if ( fxsize <= 0 ) + { + post( "blinkenlights~: wrong x pixel size : ignored" ); + return; + } + else + { + if ( x->x_xsize == (int)fxsize ) return; + x->x_xsize=(int)fxsize; + } + if (x->x_ecanvas) blinkenlights_erase( x ); + blinkenlights_draw_new( x ); } static void blinkenlights_ysize(t_blinkenlights* x, t_float fysize) { - if ( fysize <= 0 ) { - post( "blinkenlights~: wrong y pixel size : ignored" ); - return; - } else { - if ( x->x_ysize == (int)fysize ) return; - x->x_ysize=(int)fysize; - } - if (x->x_ecanvas) blinkenlights_erase( x ); - blinkenlights_draw_new( x ); + if ( fysize <= 0 ) + { + post( "blinkenlights~: wrong y pixel size : ignored" ); + return; + } + else + { + if ( x->x_ysize == (int)fysize ) return; + x->x_ysize=(int)fysize; + } + if (x->x_ecanvas) blinkenlights_erase( x ); + blinkenlights_draw_new( x ); } static void blinkenlights_background(t_blinkenlights* x, t_float fR, t_float fG, t_float fB) { - if ( fR <0 || fR>255 ) - { - post("blinkenlights : wrong color component : fR : %d", fR); - return; - } - if ( fG <0 || fG>255 ) - { - post("blinkenlights : wrong color component : fG : %d", fG); - return; - } - if ( fB <0 || fB>255 ) - { - post("blinkenlights : wrong color component : fB : %d", fB); - return; - } - sprintf( x->x_background, "#%.2x%.2x%.2x", (int)fR, (int)fG, (int)fB ); - post("blinkenlights : background color set to : %s", x->x_background ); + if ( fR <0 || fR>255 ) + { + post("blinkenlights : wrong color component : fR : %d", fR); + return; + } + if ( fG <0 || fG>255 ) + { + post("blinkenlights : wrong color component : fG : %d", fG); + return; + } + if ( fB <0 || fB>255 ) + { + post("blinkenlights : wrong color component : fB : %d", fB); + return; + } + sprintf( x->x_background, "#%.2x%.2x%.2x", (int)fR, (int)fG, (int)fB ); + post("blinkenlights : background color set to : %s", x->x_background ); } static void blinkenlights_foreground(t_blinkenlights* x, t_float fR, t_float fG, t_float fB) { - if ( fR <0 || fR>255 ) - { - post("blinkenlights : wrong color component : fR : %d", fR); - return; - } - if ( fG <0 || fG>255 ) - { - post("blinkenlights : wrong color component : fG : %d", fG); - return; - } - if ( fB <0 || fB>255 ) - { - post("blinkenlights : wrong color component : fB : %d", fB); - return; - } - sprintf( x->x_foreground, "#%.2x%.2x%.2x", (int)fR, (int)fG, (int)fB ); - post("blinkenlights : foreground color set to : %s", x->x_foreground ); + if ( fR <0 || fR>255 ) + { + post("blinkenlights : wrong color component : fR : %d", fR); + return; + } + if ( fG <0 || fG>255 ) + { + post("blinkenlights : wrong color component : fG : %d", fG); + return; + } + if ( fB <0 || fB>255 ) + { + post("blinkenlights : wrong color component : fB : %d", fB); + return; + } + sprintf( x->x_foreground, "#%.2x%.2x%.2x", (int)fR, (int)fG, (int)fB ); + post("blinkenlights : foreground color set to : %s", x->x_foreground ); } static void blinkenlights_pixon(t_blinkenlights* x, t_float fX, t_float fY) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : pixon : canvas does not exist" ); - return; - } - if ( fX<1 || fX>x->x_width ) - { - post("blinkenlights : pixon : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); - return; - } - if ( fY<1 || fY>x->x_height ) - { - post("blinkenlights : pixon : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); - return; - } - SYS_VGUI6(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill %s\n", x, x, (int)fX, (int)fY, x->x_foreground ); + if ( !x->x_ecanvas ) + { + post("blinkenlights : pixon : canvas does not exist" ); + return; + } + if ( fX<1 || fX>x->x_width ) + { + post("blinkenlights : pixon : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); + return; + } + if ( fY<1 || fY>x->x_height ) + { + post("blinkenlights : pixon : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); + return; + } + SYS_VGUI6(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill %s\n", x, x, (int)fX, (int)fY, x->x_foreground ); } static void blinkenlights_pixoff(t_blinkenlights* x, t_float fX, t_float fY) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : pixoff : canvas does not exist" ); - return; - } - if ( fX<1 || fX>x->x_width ) - { - post("blinkenlights : pixoff : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); - return; - } - if ( fY<1 || fY>x->x_height ) - { - post("blinkenlights : pixoff : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); - return; - } - SYS_VGUI6(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill %s\n", x, x, (int)fX, (int)fY, x->x_background ); + if ( !x->x_ecanvas ) + { + post("blinkenlights : pixoff : canvas does not exist" ); + return; + } + if ( fX<1 || fX>x->x_width ) + { + post("blinkenlights : pixoff : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); + return; + } + if ( fY<1 || fY>x->x_height ) + { + post("blinkenlights : pixoff : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); + return; + } + SYS_VGUI6(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill %s\n", x, x, (int)fX, (int)fY, x->x_background ); } static void blinkenlights_pixel(t_blinkenlights* x, t_float fX, t_float fY, t_float fR, t_float fG, t_float fB) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : pixel : canvas does not exist" ); - return; - } - if ( fX<1 || fX>x->x_width ) - { - post("blinkenlights : pixel : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); - return; - } - if ( fY<1 || fY>x->x_height ) - { - post("blinkenlights : pixel : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); - return; - } - if ( fR <0 || fR>255 ) - { - post("blinkenlights : pixel : wrong color component : fR : %d", fR); - return; - } - if ( fG <0 || fG>255 ) - { - post("blinkenlights : pixel : wrong color component : fG : %d", fG); - return; - } - if ( fB <0 || fB>255 ) - { - post("blinkenlights : pixel : wrong color component : fB : %d", fB); - return; - } - SYS_VGUI8(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill #%.2X%.2X%.2X\n", x, x, (int)fX, (int)fY, (int)fR, (int)fG, (int)fB ); + if ( !x->x_ecanvas ) + { + post("blinkenlights : pixel : canvas does not exist" ); + return; + } + if ( fX<1 || fX>x->x_width ) + { + post("blinkenlights : pixel : wrong x coordinate : %d : should be in [1,%d]", (int)fX, x->x_width ); + return; + } + if ( fY<1 || fY>x->x_height ) + { + post("blinkenlights : pixel : wrong y coordinate : %d : should be in [1,%d]", (int)fY, x->x_height ); + return; + } + if ( fR <0 || fR>255 ) + { + post("blinkenlights : pixel : wrong color component : fR : %d", fR); + return; + } + if ( fG <0 || fG>255 ) + { + post("blinkenlights : pixel : wrong color component : fG : %d", fG); + return; + } + if ( fB <0 || fB>255 ) + { + post("blinkenlights : pixel : wrong color component : fB : %d", fB); + return; + } + SYS_VGUI8(".x%lx.c itemconfigure %xPIX%.5d%.5d -fill #%.2X%.2X%.2X\n", x, x, (int)fX, (int)fY, (int)fR, (int)fG, (int)fB ); } static void blinkenlights_clear(t_blinkenlights* x) { - t_int xi, yi; + t_int xi, yi; - for ( xi=1; xi<=x->x_width; xi++ ) - { - for ( yi=1; yi<=x->x_height; yi++ ) + for ( xi=1; xi<=x->x_width; xi++ ) { - blinkenlights_pixoff( x, xi, yi ); + for ( yi=1; yi<=x->x_height; yi++ ) + { + blinkenlights_pixoff( x, xi, yi ); + } } - } } - /* close the current movie */ +/* close the current movie */ static void blinkenlights_close(t_blinkenlights *x) { /* closing previous file descriptor */ - if ( x->x_filed != NULL ) { - if(fclose(x->x_filed) < 0) - { - perror( "blinkenlights : closing file" ); - } - x->x_filed = NULL; + if ( x->x_filed != NULL ) + { + if(fclose(x->x_filed) < 0) + { + perror( "blinkenlights : closing file" ); + } + x->x_filed = NULL; } if ( x->x_frame ) { - freebytes( x->x_frame, x->x_width*x->x_height*sizeof(t_int) ); - x->x_frame = NULL; + freebytes( x->x_frame, x->x_width*x->x_height*sizeof(t_int) ); + x->x_frame = NULL; } } - /* read the next frame */ +/* read the next frame */ static void blinkenlights_readframe(t_blinkenlights *x) { - char *lineread = (char*) getbytes( BL_MAX_LENGTH ); - t_int flineno = 0; - t_int width, height, nwidth; - - //post( "blinkenlights: being readframe:>%s<", lineread ); + char *lineread = (char*) getbytes( BL_MAX_LENGTH ); + t_int flineno = 0; + t_int width, height, nwidth; + + //post( "blinkenlights: being readframe:>%s<", lineread ); if ( !x->x_ecanvas ) { - post("blinkenlights : next : canvas does not exist" ); - return; + post("blinkenlights : next : canvas does not exist" ); + return; } if ( x->x_filed == NULL ) { - post( "blinkenlights : no file is opened for reading a frame" ); - blinkenlights_close(x); - return; + post( "blinkenlights : no file is opened for reading a frame" ); + blinkenlights_close(x); + return; } // skip header and empty lines - while ( lineread[0] == '#' || lineread[0] == '\n' || lineread[0] == '\0' ) - { - - //post( "blinkenlights : skipped line : >%s<", lineread ); - if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == 0 ) - { - post( "blinkenlights : end of file detected : looping..." ); - fseek( x->x_filed, 0L, SEEK_SET ); - outlet_bang(x->outlet_bang); - } - } - - if ( lineread[0] != '@' ) - { - post( "blinkenlights : format error : should find a time lime here : @XXX : got : >%s<", lineread ); - blinkenlights_close(x); - return; - } + while ( lineread[0] == '#' || lineread[0] == '\n' || lineread[0] == '\0' ) + { + + //post( "blinkenlights : skipped line : >%s<", lineread ); + if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == 0 ) + { + post( "blinkenlights : end of file detected : looping..." ); + fseek( x->x_filed, 0L, SEEK_SET ); + outlet_bang(x->outlet_bang); + } + } + + if ( lineread[0] != '@' ) + { + post( "blinkenlights : format error : should find a time lime here : @XXX : got : >%s<", lineread ); + blinkenlights_close(x); + return; + } else { - x->x_timer = atoi( lineread+1 ); - // post( "blinkenlights : setting timer to %d", x->x_timer ); + x->x_timer = atoi( lineread+1 ); + // post( "blinkenlights : setting timer to %d", x->x_timer ); } // read the contents of one frame - + // when reading first frame the height and width are read from the file height = 0; width = 0; while ( 1 ) { - if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == NULL ) + if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == NULL ) { - post( "blinkenlights : EOF not expected here !!! "); - blinkenlights_close(x); - return; + post( "blinkenlights : EOF not expected here !!! "); + blinkenlights_close(x); + return; } else { - if ( (lineread[0] == '\0') || (lineread[0] == '#') || (lineread[0] == '\n') ) break; - // post( "blinkenlights : lineread : %s", lineread ); - - nwidth = strlen( lineread )-1; // because of the carriage return - flineno++; - height = flineno; - if ( ( nwidth != width ) && ( width != 0 ) ) - { - post( "blinkenlights : weird file : width has changed (nwidth=%d) (width=%d)", nwidth, width ); - blinkenlights_close( x ); - return; - } - width = nwidth; - if ( x->x_frame != NULL ) - { - t_int pint = 0; - t_int newvalue; - - while ( pint < width ) - { - newvalue = (int) *(lineread+pint) - 48 /* ascii value for '0' */; - if ( newvalue != *(x->x_frame+(flineno-1)*x->x_width+pint ) ) - { - *(x->x_frame+(flineno-1)*x->x_width+pint ) = newvalue; - switch ( newvalue ) + if ( (lineread[0] == '\0') || (lineread[0] == '#') || (lineread[0] == '\n') ) break; + // post( "blinkenlights : lineread : %s", lineread ); + + nwidth = strlen( lineread )-1; // because of the carriage return + flineno++; + height = flineno; + if ( ( nwidth != width ) && ( width != 0 ) ) + { + post( "blinkenlights : weird file : width has changed (nwidth=%d) (width=%d)", nwidth, width ); + blinkenlights_close( x ); + return; + } + width = nwidth; + if ( x->x_frame != NULL ) + { + t_int pint = 0; + t_int newvalue; + + while ( pint < width ) + { + newvalue = (int) *(lineread+pint) - 48 /* ascii value for '0' */; + if ( newvalue != *(x->x_frame+(flineno-1)*x->x_width+pint ) ) { - case 0: - // post( "pixoff %d %d", pint+1, flineno ); - blinkenlights_pixoff( x, pint+1, flineno ); - break; - case 1: - // post( "pixon %d %d", pint+1, flineno ); - blinkenlights_pixon( x, pint+1, flineno ); - break; - default: - // post("blinkenlights : wrong value found for pixel : %d (c=%c)", newvalue, *(lineread+pint) ); - break; + *(x->x_frame+(flineno-1)*x->x_width+pint ) = newvalue; + switch ( newvalue ) + { + case 0: + // post( "pixoff %d %d", pint+1, flineno ); + blinkenlights_pixoff( x, pint+1, flineno ); + break; + case 1: + // post( "pixon %d %d", pint+1, flineno ); + blinkenlights_pixon( x, pint+1, flineno ); + break; + default: + // post("blinkenlights : wrong value found for pixel : %d (c=%c)", newvalue, *(lineread+pint) ); + break; + } } - } - pint++; - } - } - if ( x->x_frame == NULL ) x->x_height++; + pint++; + } + } + if ( x->x_frame == NULL ) x->x_height++; } } if ( x->x_frame == NULL ) { - if ( x->x_filed != NULL ) if ( fseek(x->x_filed, 0L, SEEK_SET) < 0 ) - { - post( "blinkenlights : could not rewind file" ); - blinkenlights_close( x ); - return; - } - blinkenlights_width(x, width); - blinkenlights_height(x, height); - x->x_frame = ( t_int* ) getbytes( x->x_width*x->x_height*sizeof(t_int) ); - blinkenlights_readframe(x); + if ( x->x_filed != NULL ) if ( fseek(x->x_filed, 0L, SEEK_SET) < 0 ) + { + post( "blinkenlights : could not rewind file" ); + blinkenlights_close( x ); + return; + } + blinkenlights_width(x, width); + blinkenlights_height(x, height); + x->x_frame = ( t_int* ) getbytes( x->x_width*x->x_height*sizeof(t_int) ); + blinkenlights_readframe(x); } if ( lineread ) freebytes( lineread, BL_MAX_LENGTH ); @@ -594,276 +611,277 @@ static void blinkenlights_readframe(t_blinkenlights *x) /* remember all the frame positions */ static void blinkenlights_findframes(t_blinkenlights *x) { - int i =0; - - x->frame_no = 0; - - for(i=0;;i++) - { - char *lineread = (char*) getbytes( BL_MAX_LENGTH ); - - fgets( lineread, BL_MAX_LENGTH, x->x_filed ); - if(strlen(lineread) == 0) break; - - if(lineread[0] == '@') - { - x->frame_pos[x->frame_no] = ftell(x->x_filed); - x->frame_no++; - } - if (lineread) freebytes( lineread, BL_MAX_LENGTH ); - } - fseek( x->x_filed, 0L, SEEK_SET ); - post("the end:: %d frames!", x->frame_no); + int i =0; + + x->frame_no = 0; + + for(i=0;; i++) + { + char *lineread = (char*) getbytes( BL_MAX_LENGTH ); + + fgets( lineread, BL_MAX_LENGTH, x->x_filed ); + if(strlen(lineread) == 0) break; + + if(lineread[0] == '@') + { + x->frame_pos[x->frame_no] = ftell(x->x_filed); + x->frame_no++; + } + if (lineread) freebytes( lineread, BL_MAX_LENGTH ); + } + fseek( x->x_filed, 0L, SEEK_SET ); + post("the end:: %d frames!", x->frame_no); } //------------------------------------------------------------------------- static void blinkenlights_goto(t_blinkenlights* x) { - //char *lineread = (char*) getbytes( BL_MAX_LENGTH ); - char lineread[BL_MAX_LENGTH]; - int current_frame = x->frame_pos[(int)(x->frame_inc * (x->frame_no-1))]; - int i, n, width, newvalue, height, nwidth; - - t_int flineno = 0; - - fseek(x->x_filed, current_frame, SEEK_SET); - - height = 0; +//char *lineread = (char*) getbytes( BL_MAX_LENGTH ); + char lineread[BL_MAX_LENGTH]; + int current_frame = x->frame_pos[(int)(x->frame_inc * (x->frame_no-1))]; + int i, n, width, newvalue, height, nwidth; + + t_int flineno = 0; + + fseek(x->x_filed, current_frame, SEEK_SET); + + height = 0; width = 0; while ( 1 ) { - if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == NULL ) + if ( fgets( lineread, BL_MAX_LENGTH, x->x_filed ) == NULL ) { - post( "blinkenlights : EOF not expected here !!! "); - blinkenlights_close(x); - return; + post( "blinkenlights : EOF not expected here !!! "); + blinkenlights_close(x); + return; } else { - if ( (lineread[0] == '\0') || (lineread[0] == '#') || (lineread[0] == '\n') ) break; - // post( "blinkenlights : lineread : %s", lineread ); - - nwidth = strlen( lineread )-1; // because of the carriage return - flineno++; - height = flineno; - if ( ( nwidth != width ) && ( width != 0 ) ) - { - post( "blinkenlights : weird file : width has changed (nwidth=%d) (width=%d)", nwidth, width ); - blinkenlights_close( x ); - return; - } - width = nwidth; - if ( x->x_frame != NULL ) - { - t_int pint = 0; - t_int newvalue; - - while ( pint < width ) - { - newvalue = (int) *(lineread+pint) - 48 /* ascii value for '0' */; - if ( newvalue != *(x->x_frame+(flineno-1)*x->x_width+pint ) ) - { - *(x->x_frame+(flineno-1)*x->x_width+pint ) = newvalue; - switch ( newvalue ) + if ( (lineread[0] == '\0') || (lineread[0] == '#') || (lineread[0] == '\n') ) break; + // post( "blinkenlights : lineread : %s", lineread ); + + nwidth = strlen( lineread )-1; // because of the carriage return + flineno++; + height = flineno; + if ( ( nwidth != width ) && ( width != 0 ) ) + { + post( "blinkenlights : weird file : width has changed (nwidth=%d) (width=%d)", nwidth, width ); + blinkenlights_close( x ); + return; + } + width = nwidth; + if ( x->x_frame != NULL ) + { + t_int pint = 0; + t_int newvalue; + + while ( pint < width ) + { + newvalue = (int) *(lineread+pint) - 48 /* ascii value for '0' */; + if ( newvalue != *(x->x_frame+(flineno-1)*x->x_width+pint ) ) { - case 0: - // post( "pixoff %d %d", pint+1, flineno ); - blinkenlights_pixoff( x, pint+1, flineno ); - break; - case 1: - // post( "pixon %d %d", pint+1, flineno ); - blinkenlights_pixon( x, pint+1, flineno ); - break; - default: - // post("blinkenlights : wrong value found for pixel : %d (c=%c)", newvalue, *(lineread+pint) ); - break; + *(x->x_frame+(flineno-1)*x->x_width+pint ) = newvalue; + switch ( newvalue ) + { + case 0: + // post( "pixoff %d %d", pint+1, flineno ); + blinkenlights_pixoff( x, pint+1, flineno ); + break; + case 1: + // post( "pixon %d %d", pint+1, flineno ); + blinkenlights_pixon( x, pint+1, flineno ); + break; + default: + // post("blinkenlights : wrong value found for pixel : %d (c=%c)", newvalue, *(lineread+pint) ); + break; + } } - } - pint++; - } - } - if ( x->x_frame == NULL ) x->x_height++; + pint++; + } + } + if ( x->x_frame == NULL ) x->x_height++; } } if ( x->x_frame == NULL ) { - if ( x->x_filed != NULL ) if ( fseek(x->x_filed, 0L, SEEK_SET) < 0 ) - { - post( "blinkenlights : could not rewind file" ); - blinkenlights_close( x ); - return; - } - blinkenlights_width(x, width); - blinkenlights_height(x, height); - x->x_frame = ( t_int* ) getbytes( x->x_width*x->x_height*sizeof(t_int) ); - blinkenlights_readframe(x); - } - + if ( x->x_filed != NULL ) if ( fseek(x->x_filed, 0L, SEEK_SET) < 0 ) + { + post( "blinkenlights : could not rewind file" ); + blinkenlights_close( x ); + return; + } + blinkenlights_width(x, width); + blinkenlights_height(x, height); + x->x_frame = ( t_int* ) getbytes( x->x_width*x->x_height*sizeof(t_int) ); + blinkenlights_readframe(x); + } + } static void blinkenlights_frame_pos(t_blinkenlights* x, t_float pos) { - if(pos > 1 | pos < 0) post ("dude, don't be crazy!"); - else x->frame_inc = pos;; - //post("frame %d", x->frame_inc); + if(pos > 1 | pos < 0) post ("dude, don't be crazy!"); + else x->frame_inc = pos;; +//post("frame %d", x->frame_inc); } static void blinkenlights_timer2(t_blinkenlights* x, t_float timer) { - x->x_timer2 = timer; - //post("frame %d", x->frame_inc); + x->x_timer2 = timer; +//post("frame %d", x->frame_inc); } - /* open movie */ +/* open movie */ static void blinkenlights_open(t_blinkenlights *x, t_symbol *sfile) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : open : canvas does not exist" ); - return; - } - - //---------------------------------- - /* closing previous file descriptor */ - if ( x->x_filed != NULL ) { - if(fclose(x->x_filed) < 0) - { - perror( "blinkenlights : closing file" ); - } - x->x_filed = NULL; - } - if ( x->x_frame ) - { - blinkenlights_clear(x); - } - - //-------------------------------- - - if ( ( x->x_filed = fopen( sfile->s_name, "r" ) ) == NULL ) - { - error( "blinkenlights : cannot open >%s<", sfile->s_name); - return; - } - post( "blinkenlights : opened >%s<", sfile->s_name); - // don't read the first frame when open.. - //blinkenlights_readframe(x); - blinkenlights_findframes(x); + if ( !x->x_ecanvas ) + { + post("blinkenlights : open : canvas does not exist" ); + return; + } + + //---------------------------------- + /* closing previous file descriptor */ + if ( x->x_filed != NULL ) + { + if(fclose(x->x_filed) < 0) + { + perror( "blinkenlights : closing file" ); + } + x->x_filed = NULL; + } + if ( x->x_frame ) + { + blinkenlights_clear(x); + } + + //-------------------------------- + + if ( ( x->x_filed = fopen( sfile->s_name, "r" ) ) == NULL ) + { + error( "blinkenlights : cannot open >%s<", sfile->s_name); + return; + } + post( "blinkenlights : opened >%s<", sfile->s_name); + // don't read the first frame when open.. + //blinkenlights_readframe(x); + blinkenlights_findframes(x); } - /* play frames */ +/* play frames */ static void blinkenlights_playframes(t_blinkenlights *x) { - blinkenlights_readframe( x ); - clock_delay( x->x_clock, (double)x->x_timer ); + blinkenlights_readframe( x ); + clock_delay( x->x_clock, (double)x->x_timer ); } /* play frames2 */ static void blinkenlights_playframes2(t_blinkenlights *x) { - blinkenlights_goto(x); - clock_delay( x->x_clock2, (double)x->x_timer2 ); + blinkenlights_goto(x); + clock_delay( x->x_clock2, (double)x->x_timer2 ); } - /* play movie */ +/* play movie */ static void blinkenlights_play(t_blinkenlights *x) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : play : canvas does not exist" ); - return; - } - - if ( x->x_filed == NULL ) - { - post( "blinkenlights : no file is opened for playing" ); - blinkenlights_close(x); - return; - } - - if ( x->x_clock == NULL ) x->x_clock = clock_new( x, (t_method)blinkenlights_playframes); - clock_delay( x->x_clock, (double)x->x_timer ); + if ( !x->x_ecanvas ) + { + post("blinkenlights : play : canvas does not exist" ); + return; + } + + if ( x->x_filed == NULL ) + { + post( "blinkenlights : no file is opened for playing" ); + blinkenlights_close(x); + return; + } + + if ( x->x_clock == NULL ) x->x_clock = clock_new( x, (t_method)blinkenlights_playframes); + clock_delay( x->x_clock, (double)x->x_timer ); } - /* vj movie */ +/* vj movie */ static void blinkenlights_vj(t_blinkenlights *x, t_float start_vj) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : play : canvas does not exist" ); - return; - } - - if ( x->x_filed == NULL ) - { - post( "blinkenlights : no file is opened for playing" ); - blinkenlights_close(x); - return; - } - - if(start_vj) - { - if ( x->x_clock2 == NULL ) x->x_clock2 = clock_new( x, (t_method)blinkenlights_playframes2); - clock_delay( x->x_clock2, (double)x->x_timer2 ); - } - else - { - clock_unset( x->x_clock2 ); - } + if ( !x->x_ecanvas ) + { + post("blinkenlights : play : canvas does not exist" ); + return; + } + + if ( x->x_filed == NULL ) + { + post( "blinkenlights : no file is opened for playing" ); + blinkenlights_close(x); + return; + } + + if(start_vj) + { + if ( x->x_clock2 == NULL ) x->x_clock2 = clock_new( x, (t_method)blinkenlights_playframes2); + clock_delay( x->x_clock2, (double)x->x_timer2 ); + } + else + { + clock_unset( x->x_clock2 ); + } } - /* stop movie */ +/* stop movie */ static void blinkenlights_stop(t_blinkenlights *x) { - if ( !x->x_ecanvas ) - { - post("blinkenlights : play : canvas does not exist" ); - return; - } - - if ( x->x_filed == NULL ) - { - post( "blinkenlights : no file is opened for playing" ); - blinkenlights_close(x); - return; - } - - if ( x->x_clock != NULL ) - { - clock_unset( x->x_clock ); - } + if ( !x->x_ecanvas ) + { + post("blinkenlights : play : canvas does not exist" ); + return; + } + + if ( x->x_filed == NULL ) + { + post( "blinkenlights : no file is opened for playing" ); + blinkenlights_close(x); + return; + } + + if ( x->x_clock != NULL ) + { + clock_unset( x->x_clock ); + } } - /* jump to next frame */ +/* jump to next frame */ static void blinkenlights_next(t_blinkenlights *x) { - blinkenlights_readframe(x); + blinkenlights_readframe(x); } void blinkenlights_setup(void) { - verbose(0, blinkenlights_version); - blinkenlights_class = class_new(gensym("blinkenlights"), (t_newmethod)blinkenlights_new, - (t_method)blinkenlights_free, - sizeof(t_blinkenlights), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_width, gensym("width"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_height, gensym("height"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_xsize, gensym("xsize"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_ysize, gensym("ysize"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_open, gensym("open"), A_SYMBOL, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_create, gensym("create"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_destroy, gensym("destroy"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_next, gensym("next"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_play, gensym("play"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_stop, gensym("stop"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_frame_pos, gensym("goto"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_vj, gensym("vj"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_timer2, gensym("timer2"), A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_background, gensym("background"), A_FLOAT, A_FLOAT, A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_foreground, gensym("foreground"), A_FLOAT, A_FLOAT, A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_destroy, gensym("destroy"), 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixon, gensym("pixon"), A_FLOAT, A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixoff, gensym("pixoff"), A_FLOAT, A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixel, gensym("pixel"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); - class_addmethod( blinkenlights_class, (t_method)blinkenlights_clear, gensym("clear"), 0); + verbose(0, blinkenlights_version); + blinkenlights_class = class_new(gensym("blinkenlights"), (t_newmethod)blinkenlights_new, + (t_method)blinkenlights_free, + sizeof(t_blinkenlights), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_width, gensym("width"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_height, gensym("height"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_xsize, gensym("xsize"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_ysize, gensym("ysize"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_open, gensym("open"), A_SYMBOL, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_create, gensym("create"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_destroy, gensym("destroy"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_next, gensym("next"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_play, gensym("play"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_stop, gensym("stop"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_frame_pos, gensym("goto"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_vj, gensym("vj"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_timer2, gensym("timer2"), A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_background, gensym("background"), A_FLOAT, A_FLOAT, A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_foreground, gensym("foreground"), A_FLOAT, A_FLOAT, A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_destroy, gensym("destroy"), 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixon, gensym("pixon"), A_FLOAT, A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixoff, gensym("pixoff"), A_FLOAT, A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_pixel, gensym("pixel"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); + class_addmethod( blinkenlights_class, (t_method)blinkenlights_clear, gensym("clear"), 0); } |