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);
}
|