--- MITgcm_contrib/darwinview/src/darwin.c 2007/07/16 15:40:16 1.4 +++ MITgcm_contrib/darwinview/src/darwin.c 2007/07/16 19:16:26 1.5 @@ -14,12 +14,13 @@ void do_byteswap_f32( float arr[], int nel ), global(), local( int, int, int ); void readnames( char[] ), readarray( float[], char[], int ), readjet(), readxz( float[], char[] ); +void readyz( float[], char[] ); void TimerFunction( int ), bitmap( char[], int, int ); float data[MAX][MAX*MAX], mxval, mnval, jet[64][3]; float globalmx=0, globalmn=100; int win[MAX], ilev=1, howmany, sets, count=0, glo=0, usr=0, anim=0, logscale=0, xz=0, nonegs=1, endian=0; -int xmax, ymax, offset=0; +int xmax, ymax, yoffset=0, xoffset=0, yz=0; char initfns[MAX][MAX], fns[MAX][MAX][MAX]; void menu(int value){ // called when menu is opened on right click @@ -60,14 +61,21 @@ for( q=0; q0 ) - offset--; - } + case DOWN : if( xz && yoffset>0 ) + yoffset--; else{ - if( ilev1 ) - ilev--; // if up arrow is pressed, move up a level + if( yz && xoffset>0 ) + xoffset--; + else + if( ilev>1 && !xz && !yz ) + ilev--; // if up arrow is pressed, move up a level } break; case LEFT : if( count>0 ) @@ -233,21 +251,27 @@ glutPostRedisplay(); - if (anim ) + if ( anim ) switch( value ){ - case DOWN : if( xz ){ - if( offset==0 ) offset=NY-1; - } + case DOWN : if( xz && yoffset==0 ) + yoffset=NY-1; else{ - if( ilev==NZ ) ilev=1; // if end reached, restart + if( yz && xoffset==NX-1 ) + xoffset=0; + else + if( ilev==NZ && !xz && !yz ) + ilev=1; // if end reached, restart } glutTimerFunc( 100, TimerFunction, value ); // recalls itself break; - case UP : if( xz ){ - if( offset==NY-1) offset=0; - } + case UP : if( xz && yoffset==NY-1 ) + yoffset=0; else{ - if( ilev==1 ) ilev=NZ; // if end reached, restart + if( yz && xoffset==0 ) + xoffset=NX-1; + else + if( ilev==1 ) + ilev=NZ; // if end reached, restart } glutTimerFunc( 100, TimerFunction, value ); // recalls itself break; @@ -267,22 +291,24 @@ glutTimerFunc( 100, TimerFunction, key); // to scroll automatically switch(key){ - case DOWN : if( xz ){ - if( offset>0 ) - offset--; - } + case DOWN : if( xz && yoffset>0 ) + yoffset--; else{ - if( ilev1 ) // if you haven't reached the top - ilev--; // keep going up + if( yz && xoffset>0 ) + xoffset--; + else + if( ilev>1 ) // if you haven't reached the top + ilev--; // keep going up } break; case RIGHT : if( count mxval ) mxval=data[i][j]; // set largest val to mxval @@ -360,27 +390,58 @@ } void readxz( float arr[], char filename[] ){ - int i; - float tmp[MAX*MAX]; + int i, j; + float tmp[MAX][MAX], tmp2[MAX*MAX]; FILE* fp; fp=fopen( filename, "rb" ); for( i=0; i