home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Collection - Online Library - January 1996 / CKITOS2196.ISO / diskette / gg244090.dsk / unc.dsk / CHAPTER.10 / DB_ACCES.C next >
C/C++ Source or Header  |  1993-10-28  |  3KB  |  89 lines

  1. /*****************************************************************************/
  2. /* Module: database_access.c                                                 */
  3. /*                                                                           */
  4. /* Description:                                                              */
  5. /*    This module provides an online interface to retrieve the data in       */
  6. /*    the remote database managed by database_server.exe.                    */
  7. /*                                                                           */
  8. /*****************************************************************************/
  9. #include "db.h"
  10. #include "errorchk.h"
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. #define  MAX_CLINE_LEN  256
  16. enum { _END, _READ, _MOVE, _HELP };
  17.  
  18. void database_access(db_context_t context_h)
  19. {
  20.    char cline[ MAX_CLINE_LEN ];
  21.    int  cnt, len;
  22.    long pos, new_pos;
  23.    char cmd [ 8 ] , arg1[ 8 ], last[ 8 ];
  24. /*   enum commands  cmd [ 8 ];*/
  25.    db_data_t db_data;
  26.    unsigned32 st;
  27.  
  28.    db_getpos( context_h, &pos, &st );
  29.    do {
  30.       printf( "(%ld)# ", pos ); fflush( stdout );
  31.       if ( gets( cline ) == NULL ) break;
  32.       cnt = sscanf( cline, "%s %s %s", cmd, arg1, last );
  33.  
  34.       switch( cmd[ 0 ] ) {
  35.       case 'e': case 'E':
  36.          cmd[ 0 ] = _END;
  37.          break;
  38.       case 'r': case 'R':
  39.          switch( cnt ) {
  40.          case 1:
  41.             db_read( context_h, &db_data, &new_pos, &st );
  42.             printf( "%4ld: %s\n", pos, db_data.data );
  43.             pos = new_pos;
  44.             break;
  45.          case 2:
  46.             len = atoi( arg1 );
  47.             for ( cnt = 0; cnt < len; cnt++) {
  48.                db_read( context_h, &db_data, &new_pos, &st );
  49.                printf( "%4ld: %s\n", pos, db_data.data );
  50.                if ( pos == new_pos ) break;
  51.                else                  pos = new_pos;
  52.             }
  53.             break;
  54.          default:
  55.             printf( "   Usage: r(ead) [len]\n" );
  56.             break;
  57.          }
  58.          cmd[ 0 ] = _HELP;
  59.          break;
  60.       case 'm': case 'M':
  61.          switch( cnt ) {
  62.          case 1:
  63.             printf( "   Current position: %ld\n", pos );
  64.             break;
  65.          case 2:
  66.             new_pos = atol( arg1 );
  67.             db_setpos( context_h, &new_pos, &st );
  68.             db_getpos( context_h, &pos, &st );
  69.             break;
  70.          default:
  71.             printf( "   Usage: m(ove) [pos]\n" );
  72.             break;
  73.          }
  74.          cmd[ 0 ] = _HELP;
  75.          break;
  76.       case '?': case 'h': case 'H':
  77.       default:
  78.          cmd[ 0 ] = _HELP;
  79.          printf( "Usage:\n" );
  80.          printf( "   m(ove) [pos]\n" );
  81.          printf( "   r(ead) [len]\n" );
  82.          printf( "   e(nd)\n" );
  83.          printf( "   h(elp) | ?\n" );
  84.          break;
  85.       }
  86.    } while( cmd[ 0 ] != _END );
  87. }
  88.  
  89.