--- MITgcm_contrib/darwinview/src/darwin.c 2007/07/13 18:47:12 1.3 +++ MITgcm_contrib/darwinview/src/darwin.c 2007/07/24 16:53:55 1.6 @@ -8,20 +8,22 @@ #define DOWN 103 #define RIGHT 102 #define LEFT 100 -#define MAX 200 +#define MAX 700 int NX, NY, NZ; void do_byteswap_f32( float arr[], int nel ), global(), local( int, int, int ); -void readnames( char[] ), readarray( float[], char[], int ), readjet(); +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[MAX][MAX]; +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, nonegs=1, endian=0; +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, 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 +void menu( int value ){ // called when menu is opened on right click switch( value ){ case 1: usr=glo=0; // unset glo & usr, sets local max/min @@ -50,17 +52,31 @@ break; } } -void display(void){ // called on glutPostRedisplay +void display(){ // called on glutPostRedisplay int i, j, ioff, q; float r, g, b, k, y; double num, logmx, logmn; char str[MAX]; - for( q=0; q0 ) + yoffset--; + else{ + if( yz && xoffset1 ) - ilev--; // if up arrow is pressed, move up a level + case UP : if( xz && yoffset0 ) + xoffset--; + else + if( ilev>1 && !xz && !yz ) + ilev--; // if up arrow is pressed, move up a level + } break; case LEFT : if( count>0 ) count--; // if left arrow is pressed, move back one time step @@ -207,12 +251,28 @@ glutPostRedisplay(); - if (anim ) + if ( anim ) switch( value ){ - case DOWN : if( ilev==NZ ) ilev=1; // if end reached, restart + case DOWN : if( xz && yoffset==0 ) + yoffset=NY-1; + else{ + 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( ilev==1 ) ilev=NZ; // if end reached, restart + case UP : if( xz && yoffset==NY-1 ) + yoffset=0; + else{ + if( yz && xoffset==0 ) + xoffset=NX-1; + else + if( ilev==1 ) + ilev=NZ; // if end reached, restart + } glutTimerFunc( 100, TimerFunction, value ); // recalls itself break; case LEFT : if( count==0 ) count=howmany-1; // if end reached, restart @@ -231,11 +291,25 @@ glutTimerFunc( 100, TimerFunction, key); // to scroll automatically switch(key){ - case DOWN : if( ilev0 ) + yoffset--; + else{ + if( yz && xoffset1 ) // if you haven't reached the top - ilev--; // keep going up + case UP : if( xz && yoffset0 ) + 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 if( data[i][j] < mnval && data[i][j]!=0 ) @@ -301,18 +382,66 @@ FILE* fp; int i, j; - fp=fopen( "jet.dat", "r" ); // opens file containing values + fp=fopen( ".darwinview/jet.h", "r" ); // opens file containing values for( i=0; i<64; i++ ) // reads in 64 sets of r, g, b values for( j=0; j<3; j++ ) fscanf( fp, "%f", &jet[i][j] ); fclose( fp ); // closes file } +void readxz( float arr[], char filename[] ){ + int i, j; + float tmp[MAX][MAX], tmp2[MAX*MAX]; + FILE* fp; + + fp=fopen( filename, "rb" ); + for( i=0; i