# C-Library File IO Routines

Code Example |

/* sample.c : Sample PXPIO console application*/

#include <stdio.h>

#include <windows.h>

#include "pvkio.h"

int main(int argc, char* argv[])

> HMODULE hPvkio;

> FARPROC PVK_OpenExt, PVK_close, PVK_read, PVK_write, PVK_seek;

> FARPROC PVK_AllocEnv, PVK_DeAllocEnv, PVK_RegisterKey;

> HPVKENV hEnv;

> intfh, keysz, dtasz, i, sts, fc;

> char bfr[256], keybfr[4+1], dtabfr[4+256+1], pswd[32];

> INT16 opt = 0;

> INT32 open_err = 0;

> memset(pswd, 0x00, sizeof(pswd));

> /* Load the DLL and locate necessary entrypoints */

> if ((hPvkio = LoadLibrary("pxpio.dll")) EQ NULL) return -1;

if ((PVK_OpenExt = GetProcAddress(hPvkio, "PVK_OpenExt")) | EQ NULL) return -2;
if ((PVK_close = GetProcAddress(hPvkio, "PVK_close")) | EQ NULL) return -2;
if ((PVK_read = GetProcAddress(hPvkio, "PVK_read")) | EQ NULL) return -2;
if ((PVK_write = GetProcAddress(hPvkio, "PVK_write")) | EQ NULL) return -2;
if ((PVK_seek = GetProcAddress(hPvkio, "PVK_seek")) | EQ NULL) return -2;
if ((PVK_AllocEnv = GetProcAddress(hPvkio, "PVK_AllocEnv")) | EQ NULL) return -2;
if ((PVK_DeAllocEnv = GetProcAddress(hPvkio, "PVK_DeAllocEnv")) | EQ NULL) return -2;
if ((PVK_RegisterKey = GetProcAddress(hPvkio, "PVK_RegisterKey")) | EQ NULL) return -2;

> /* Create a new Environment */

> hEnv = (HPVKENV)(*PVK_AllocEnv)();

> if (hEnv EQ NULL) return -3;

> (*PVK_RegisterKey)(hEnv, "<Insert License Name and Number here>", 12345678L);

> fh = (int)((*PVK_OpenExt)(hEnv, "testfile", pswd, sizeof(pswd), opt, &open_err));

> if (fh EQ (int)-1) return -4;

> /* Insert/Update 10 records */

> for(i=1;i<=10;i++)

> {

> sprintf(keybfr, "%04d", i);

> sprintf(dtabfr, "This is record #%d%c", i, 0x8a);

> keysz = strlen(keybfr);

> dtasz = strlen(dtabfr);

> sts = (int)((*PVK_write)(fh, &dtabfr, dtasz, &keybfr, keysz));

> sprintf(bfr, "Writing: %s - %s - sts=%d\n", keybfr, dtabfr, sts);

> printf(bfr);

> }

> /* Seek to key 0005 and read until end of file */

> sts = (int)((*PVK_seek)(fh, "0005", 4, 1));

> fc = PVKRD_CUR;

> for(;;)

> {

> sts = (int)((*PVK_read)(fh, &dtabfr, sizeof(dtabfr), fc));

> if (sts EQ -1) break;/* EOF */

> dtabfr[sts] = 0;

> sprintf(bfr, "Read: %s - sts=%d\n", dtabfr, sts);

> printf(bfr);

> fc = PVKRD_NEXT;

> }

> (*PVK_close)(fh);

> (*PVK_DeAllocEnv)(hEnv);

> FreeLibrary(hPvkio);

> return 0;

}