File: ex_readcb.c

package info (click to toggle)
e00compr 1.0.1-5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 316 kB
  • sloc: ansic: 1,316; makefile: 66
file content (96 lines) | stat: -rw-r--r-- 2,434 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**********************************************************************
 *                          ex_readcb.c
 *
 * This example program illustrates the use of the E00ReadCallbackOpen()
 * and associated compressed E00 read functions.
 **********************************************************************/

#include <stdio.h>

#include "e00compr.h"

static const char *myReadNextLine(void *pRefData);
static void       myReadRewind(void *pRefData);

int main(int argc, char *argv[])
{
    E00ReadPtr  hReadPtr;
    const char  *pszLine;
    FILE        *fp;

    /* Open input file */
    if ((fp = fopen("test.e00", "rt")) == NULL)
    {
        /* Error */
        printf("Cannot open input file test.e00\n");
        return 1;
    }

    /* Initialize reader */
    hReadPtr = E00ReadCallbackOpen((void*)fp, 
                                   myReadNextLine, myReadRewind);

    if (hReadPtr)
    {
        /* Read lines from input until we reach EOF */
        while((pszLine = E00ReadNextLine(hReadPtr)) != NULL)
        {
            if (CPLGetLastErrorNo() == 0)
                printf("%s\n", pszLine);
            else
            {
                /* An error happened while reading the last line... */
                break;
            }
        }

        /* Close input file */
        E00ReadClose(hReadPtr);

        fclose(fp);
    }
    else
    {
        /* ERROR ... file is not a valid E00 */
    }

    return 0;
}



/**********************************************************************
 *                          myReadNextLine()
 *
 * My own implementation of the ReadNextLine() function to test the 
 * E00ReadCallbackOpen() functions.
 * 
 * This function must return a reference to static buffer with the next
 * line of input, or NULL when it reaches EOF.
 **********************************************************************/
static const char *myReadNextLine(void *pRefData)
{
    FILE *fp;
    static char szBuf[256];

    fp = (FILE *)pRefData;

    if (fgets(szBuf, 255, fp) == NULL)
        return NULL;

    szBuf[255] = '\0';

    return szBuf;
}

/**********************************************************************
 *                          myReadRewind()
 *
 * Callback function to rewind the file being read by myReadNextLine()
 **********************************************************************/
static void myReadRewind(void *pRefData)
{
    rewind((FILE *)pRefData);
}