--- MITgcm_contrib/darwinview/src/darwin.c 2007/07/13 18:47:12 1.3 +++ MITgcm_contrib/darwinview/src/darwin.c 2007/07/16 15:40:16 1.4 @@ -8,17 +8,18 @@ #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 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, offset=0; char initfns[MAX][MAX], fns[MAX][MAX][MAX]; void menu(int value){ // called when menu is opened on right click @@ -50,17 +51,24 @@ 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 ) + offset--; + } + else{ + if( ilev1 ) - ilev--; // if up arrow is pressed, move up a level + case UP : if( xz ){ + if( offset1 ) + 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 @@ -209,10 +235,20 @@ if (anim ) switch( value ){ - case DOWN : if( ilev==NZ ) ilev=1; // if end reached, restart + case DOWN : if( xz ){ + if( offset==0 ) offset=NY-1; + } + else{ + if( ilev==NZ ) 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 ){ + if( offset==NY-1) offset=0; + } + 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 +267,23 @@ glutTimerFunc( 100, TimerFunction, key); // to scroll automatically switch(key){ - case DOWN : if( ilev0 ) + offset--; + } + else{ + if( ilev1 ) // if you haven't reached the top - ilev--; // keep going up + case UP : if( xz ){ + if( offset1 ) // 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 ) @@ -308,11 +359,28 @@ fclose( fp ); // closes file } +void readxz( float arr[], char filename[] ){ + int i; + float tmp[MAX*MAX]; + FILE* fp; + + fp=fopen( filename, "rb" ); + for( i=0; i