_NewVar( ) API Library Routine Example
The following example uses _NewVar( ) to create three variables.
SET LIBRARY TO NEWVAR
*
* As defined in "pro_ext.h"
*
#define NV_PUBLIC 0
#define NV_PRIVATE 1
= xNewVar('var', 0, 0, 0, NV_PUBLIC)
DISPLAY MEMORY LIKE var
= xNewVar('onedim', 1, 5, 0, NV_PUBLIC)
DISPLAY MEMORY LIKE onedim
= xNewVar('twodim', 2, 5, 6, NV_PUBLIC)
DISPLAY MEMORY LIKE twodim
#include <pro_ext.h>
void FAR NewVarEx(ParamBlk FAR *parm)
{
char FAR *varName;
Locator loc;
int flag;
int retValue;
// Null terminate character string
if (!_SetHandSize(parm->p[0].val.ev_handle,
parm->p[0].val.ev_length+1))
{
_Error(182); // "Insufficient memory"
}
_HLock(parm->p[0].val.ev_handle);
varName = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);
varName[parm->p[0].val.ev_length] = '\0';
loc.l_subs = parm->p[1].val.ev_long;
loc.l_sub1 = parm->p[2].val.ev_long;
loc.l_sub2 = parm->p[3].val.ev_long;
flag = parm->p[4].val.ev_long;
if ((retValue = _NewVar(varName, &loc, flag)) < 0)
{
// _NewVar() returns negative Visual FoxPro error number
_Error(-retValue);
}
_HUnLock(parm->p[0].val.ev_handle);
}
FoxInfo myFoxInfo[] = {
{"XNEWVAR", (FPFI) NewVarEx, 5, "C,I,I,I,I"},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};