tfscan.h
上传用户:lengbin
上传日期:2010-03-31
资源大小:121k
文件大小:4k
开发平台:

C/C++

  1. /*----------------------------------------------------------------------
  2.   File    : tfscan.h
  3.   Contents: table file scanner management
  4.   Author  : Christian Borgelt
  5.   History : 04.01.1998 file created
  6.             11.03.1998 additional character flags enabled
  7.             12.08.1998 function tfs_copy added
  8.             26.11.1998 some function parameters changed to const
  9.             29.11.1998 function tfs_dup added
  10.             04.02.1999 long int changed to int
  11.             14.07.2001 tfs_sgetc modified, tfs_buf and tfs_err added
  12.             19.08.2001 tfs_delim added (last delimiter type)
  13.             11.02.2002 tfs_skip, tfs_reccnt, and tfs_reset added
  14. ----------------------------------------------------------------------*/
  15. #ifndef __TFSCAN__
  16. #define __TFSCAN__
  17. #include <stdio.h>
  18. /*----------------------------------------------------------------------
  19.   Preprocessor Definitions
  20. ----------------------------------------------------------------------*/
  21. /* --- character flags --- */
  22. #define TFS_RECSEP   0x01       /* flag for record separator */
  23. #define TFS_FLDSEP   0x02       /* flag for field separator */
  24. #define TFS_BLANK    0x04       /* flag for blank character */
  25. #define TFS_COMMENT  0x08       /* flag for comment character */
  26. #define TFS_OTHER    0x10       /* flag for other character type */
  27. /* --- delimiter types --- */
  28. #define TFS_EOF      0          /* end of file delimiter */
  29. #define TFS_REC      1          /* record delimiter */
  30. #define TFS_FLD      2          /* field  delimiter */
  31. /* --- buffer size --- */
  32. #define TFS_SIZE   256          /* size of internal read buffer */
  33. /*----------------------------------------------------------------------
  34.   Type Definitions
  35. ----------------------------------------------------------------------*/
  36. typedef struct {                /* --- error information --- */
  37.   int        code;              /* error code */
  38.   int        rec, fld;          /* record and field number */
  39.   int        exp;               /* expected number of records/fields */
  40.   char       *s;                /* a string (e.g., field contents) */
  41. } TFSERR;                       /* (error information) */
  42. typedef struct {                /* --- table file scanner --- */
  43.   char       cflags[256];       /* character flags */
  44.   const char *s;                /* string pointer for tfs_sgetc */
  45.   int        reccnt;            /* number of records read */
  46.   int        delim;             /* last delimiter read */
  47.   int        cnt;               /* number of characters read */
  48.   char       buf[TFS_SIZE+4];   /* read buffer */
  49.   TFSERR     err;               /* error information */
  50. } TFSCAN;                       /* (table file scanner) */
  51. /*----------------------------------------------------------------------
  52.   Functions
  53. ----------------------------------------------------------------------*/
  54. extern TFSCAN* tfs_create (void);
  55. extern void    tfs_delete (TFSCAN *tfs);
  56. extern TFSCAN* tfs_dup    (const TFSCAN *tfs);
  57. extern void    tfs_copy   (TFSCAN *dst, const TFSCAN *src);
  58. extern int     tfs_sgetc  (TFSCAN *tfs, const char *s);
  59. extern int     tfs_chars  (TFSCAN *tfs, int type, const char *chars);
  60. extern int     tfs_istype (const TFSCAN *tfs, int type, int c);
  61. extern int     tfs_getfld (TFSCAN *tfs, FILE *file, char *buf, int len);
  62. extern int     tfs_delim  (TFSCAN *tfs);
  63. extern int     tfs_cnt    (TFSCAN *tfs);
  64. extern char*   tfs_buf    (TFSCAN *tfs);
  65. extern int     tfs_skip   (TFSCAN *tfs, FILE *file);
  66. extern int     tfs_reccnt (TFSCAN *tfs);
  67. extern void    tfs_reset  (TFSCAN *tfs);
  68. extern TFSERR* tfs_err    (TFSCAN *tfs);
  69. /*----------------------------------------------------------------------
  70.   Preprocessor Definitions
  71. ----------------------------------------------------------------------*/
  72. #define tfs_delete(s)     free(s)
  73. #define tfs_istype(s,t,c) ((s)->cflags[(unsigned char)(c)] & (t))
  74. #define tfs_delim(s)      ((s)->delim)
  75. #define tfs_cnt(s)        ((s)->cnt)
  76. #define tfs_buf(s)        ((s)->buf)
  77. #define tfs_reccnt(s)     ((s)->reccnt)
  78. #define tfs_reset(s)      ((s)->reccnt = 0)
  79. #define tfs_err(s)        (&(s)->err)
  80. #endif