home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / FOXPRO / TABLES / TBLSRC / TBLVERFY.PRG < prev   
Text File  |  1992-11-13  |  6KB  |  174 lines

  1. * Program   :TblVerfy.prg
  2. * Author    :Mark D. Miller
  3. * Date      :12-Nov-1992
  4. * Notice    : Copyright (c) 12-Nov-1992 by Mark D. Miller
  5. *             All Rights Reserved.
  6. * Notes     :Verify the chosen value is in the current table.
  7. *
  8. * The includes
  9. *
  10. #INCLUDE TABLE.HDR
  11. #INCLUDE IO.HDR
  12. #INCLUDE KEYS.HDR
  13. #INCLUDE STRING.HDR
  14. #INCLUDE PICK.HDR
  15. #include colors.hdr
  16. #INCLUDE WARN.HDR
  17. *
  18. * Global Table Memory
  19. *
  20. VARDEF  EXTERN
  21.     CHAR( 12 )  OpenTableName
  22.     FILE        OpenTableHandle
  23.     UINT        TableCnt, TableCnt2, TableKy
  24.     LONG        DataList, KeyList
  25.     INT         TableType
  26.     INT         TableIdx
  27.     byte        __color_std
  28. ENDDEF
  29. **********************************************************************
  30. *                   T H E    R O U T I N E S                         *
  31. **********************************************************************
  32. * Function  :VerifyTable
  33. * Date      :11-Nov-1992
  34. * Parameters:Name           Name of the table
  35. *           :TableRow       Row field is on
  36. *           :TableCol       Column to begin printing
  37. *           :length         Max length of print area
  38. *           :pkey           Current field value
  39. *           :
  40. * Return Val:.T.            If entry found in table
  41. *            .F.            If entry not found in table
  42. * Notes     :This is the heart of the table routines.  This routine looks
  43. *            up the current field value in the table and/or reacts to the
  44. *            tab key and several cursor movement keys.
  45. *
  46. FUNCTION LOGICAL VerifyTable
  47.     PARAMETERS const    CHAR( 8 )   name,;
  48.                const    UINT        TableRow,;
  49.                const    UINT        TableCol,;
  50.                const    INT         length,;
  51.                         CHAR( 4 )   pkey
  52.  
  53.     VARDEF
  54.         CHAR( 80 )  TableIn             && 75 char data + 4 char key + '-'
  55.         LOGICAL     fnd
  56.         CHAR( 4 )   pkey2, mykey
  57.         INT         L
  58.         uint        s
  59.         byte        c_color_std
  60.     ENDDEF
  61.  
  62.     *
  63.     * Init the table if not already
  64.     *
  65.     IF AT( Name, OpenTableName ) = 0
  66.         IF .NOT. InitTable( Name )
  67.             RETURN .T.
  68.         ENDIF
  69.     ENDIF
  70.  
  71.     pkey2=TRIM( pkey )
  72.     IF TableKy <> &K_TAB
  73.         IF pkey2=""
  74.             @ TableRow, TableCol CLEAR TO TableRow, TableCol+length
  75.             IF TableKy = &K_ENTER .OR. TableKy = &K_ESC .OR. TableKy = &K_C_END .OR. ( TableKy > &K_HOME .AND. TableKy < &K_INS )
  76.                 ClearTable()
  77.             ENDIF
  78.             RETURN .T.                  && Always allow to skip field
  79.         ENDIF
  80.     ENDIF
  81.     *
  82.     * Validate the choice against the list
  83.     *
  84.     IF TableType = 1
  85.         IF TableKy = &K_TAB
  86.             IF TableIdx+1 > TableCnt
  87.                 TableIdx = 1
  88.             ELSE
  89.                 TableIdx = TableIdx + 1
  90.             ENDIF
  91.             @ TableRow, TableCol CLEAR TO TableRow, TableCol+length
  92.             @ TableRow, TableCol ?? PICK_STR( DataList, TableIdx )
  93.             *
  94.             * Here we simply force the cursor to start of the field, and
  95.             * then delete any characters in the field before stuffing the
  96.             * new value into the field.
  97.             *
  98.             KEY_INT( &K_HOME )
  99.             KEY_INT( &K_DEL )
  100.             KEY_INT( &K_DEL )
  101.             KEY_INT( &K_DEL )
  102.             KEY_INT( &K_DEL )
  103.             pkey = I_STR( TableIdx )
  104.             KEYBOARD( pkey )
  105.             fnd = .T.
  106.         ELSE
  107.             IF I_VAL( pkey2 )=0
  108.                 fnd=.F.
  109.             ELSE
  110.                 IF I_VAL( pkey2 ) > TableCnt
  111.                     fnd= .F.
  112.                 ELSE
  113.                     @ TableRow, TableCol CLEAR TO TableRow, TableCol+length
  114.                     @ TableRow, TableCol ?? PICK_STR( DataList, I_VAL( pkey2 ) )
  115.                     TableIdx = I_VAL( pkey2 )
  116.                     fnd = .T.
  117.                 ENDIF
  118.             ENDIF
  119.         ENDIF
  120.     ELSE
  121.         IF TableKy = &K_TAB
  122.             IF TableIdx+1 > TableCnt
  123.                 TableIdx = 1
  124.             ELSE
  125.                 TableIdx = TableIdx + 1
  126.             ENDIF
  127.             pkey = PICK_STR( KeyList, TableIdx )
  128.             @ TableRow, TableCol CLEAR TO TableRow, TableCol+length
  129.             @TableRow, TableCol ?? PICK_STR( DataList, TableIdx )
  130.             KEY_INT( &K_HOME )
  131.             KEY_INT( &K_DEL )
  132.             KEY_INT( &K_DEL )
  133.             KEY_INT( &K_DEL )
  134.             KEY_INT( &K_DEL )
  135.             KEYBOARD( pkey )
  136.             fnd = .T.
  137.         ELSE
  138.             TableCnt2 = 1
  139.             fnd = .F.
  140.             DO WHILE TableCnt2 < TableCnt+1 .AND. .NOT. fnd
  141.                 mykey = PICK_STR( KeyList, TableCnt2 )
  142.                 L = LEN( mykey )
  143.                 IF LEFT( pkey2, L ) = mykey
  144.                     fnd = .T.
  145.                     @ TableRow, TableCol CLEAR TO TableRow, TableCol+length
  146.                     @TableRow, TableCol ?? PICK_STR( DataList, TableCnt2 )
  147.                     TableIdx = TableCnt2
  148.                 ENDIF
  149.  
  150.                 TableCnt2 = TableCnt2 + 1
  151.             ENDDO
  152.         ENDIF
  153.     ENDIF
  154.  
  155.     IF .NOT. fnd
  156.         s = savescrn(24,0,24,79)
  157.         c_color_std = __color_std
  158.         __color_std = &RED_WHITE
  159.         @ 23, 1
  160.         WAIT CHR( 7 )+"Table error!!! Press TAB for choices!  -Press a key"
  161.         restorescrn(s)
  162.         __color_std = c_color_std
  163.         key_int(&K_HOME)                && Reposition cursor
  164.     ELSE
  165.         IF TableKy = &K_ENTER .OR. TableKy = &K_ESC .OR. TableKy = &K_C_END .OR. ( TableKy > &K_HOME .AND. TableKy < &K_INS )
  166.             ClearTable()
  167.         ENDIF
  168.     ENDIF
  169.  
  170.     RETURN fnd
  171. ENDPRO
  172.  
  173. *  EOF : TblVerfy.prg
  174.