Mini Kabibi Habibi
/*
**
*
* MEMREPL.C - Sample API routine.
*
* Copyright (c) 1989-1993 Microsoft Corporation as an unpublished
* licensed proprietary work. All rights reserved.
*
* Description:
* This is an example of an API routine that reads in the current
* work area's memo field and then replaces the Memo Field of the specified
* record number.
*
* This routine takes two parameters (the second is optional).
*
* <expN1> ----> The field number of the memo.
* [<expN2>] ----> The record number the replace should be made into.
*
*
*
**
*/
#include <pro_ext.h>
#define WORKAREA 1
#define BADHANDLE 0
MHANDLE dbhand = 0;
void FAR memrepl(ParamBlk FAR *param)
{
Locator locate;
Value val;
int memchan,skip;
long memseek, memread, memfind;
locate.l_type = 'R';
locate.l_where = 1;
locate.l_NTI = 1;
// Store the offset of the memo field.
locate.l_offset = param->p[0].val.ev_long - 1;
memchan = _MemoChan(WORKAREA); // Get the FCHAN to the memo file
if((memfind = _FindMemo(&locate)) < 0) // Find the offset of the memo
_Error((int) memfind);
memread = _MemoSize(&locate); // Find the size of the memo field
memseek = _FSeek(memchan, memfind, 0); // Move the file pointer
// Read in the memo field into our handle.
if ((dbhand = _AllocHand((unsigned) memread)) == BADHANDLE) // Read from the memo file
_Error(182); // Insufficient Memory.
memread = _FRead(memchan, _HandToPtr(dbhand), (int) memread);
val.ev_type = 'C';
val.ev_handle = dbhand;
val.ev_length = memread;
// Move to the correct record in the database.
if (param->pCount == 2)
_DBRead(WORKAREA, param->p[1].val.ev_long);
else
_DBSkip(WORKAREA, 1);
skip = _DBReplace(&locate,&val); // Replace the memo field.
_FreeHand(dbhand); // Free the handle previously allocated.
}
FoxInfo myFoxInfo[] ={
{"MEMREPL", (FPFI) memrepl, 2, "I,.I"},
};
FoxTable _FoxTable = {
(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo
};