typedef struct { int x; int y; int Len; int Type; char *Address; int EditFlag; int NumDecimals; } FieldStruc; int FindDown( FieldStruc *Field, int pos, int NUMFIELDS ); int FindLeft( FieldStruc *Field, int pos, int NUMFIELDS ); int FindRight( FieldStruc *Field, int pos, int NUMFIELDS ); int FindUp( FieldStruc *Field, int pos, int NUMFIELDS ); int GetField( FieldStruc *f ); void PutField( FieldStruc *f ); #include <GCOMM.H> void GetAllFields( FieldStruc *Field, int NUMFIELDS, int (*ChHnd)( int ch ), void (*Update)( void ) ) { register int pos = 0; register int key; for (pos=0; pos<NUMFIELDS; ++pos) { PutField( Field + pos ); } pos = 0; for (;;) { key = GetField( Field + pos ); Update(); switch( key ) { case DOWN: pos = FindDown ( Field, pos, NUMFIELDS ); break; case UP: pos = FindUp ( Field, pos, NUMFIELDS ); break; case RIGHT: pos = FindRight( Field, pos, NUMFIELDS ); break; case LEFT: pos = FindLeft ( Field, pos, NUMFIELDS ); break; case HOME: pos = 0; break; case END: pos = NUMFIELDS-1; break; default: if( ChHnd( key ) < 0 ) return; break; } if (pos < 0) pos = 0; if (pos > NUMFIELDS-1) pos = NUMFIELDS-1; } }