Copies to the buffer a single line from the specified file, starting at the current position in the file.
unsigned int _FGets(FCHAN chan, char FAR *buffer, int maxlen) FCHAN chan; /* File channel of file from which to copy. */ char FAR *buffer; /* Buffer address. */ int maxlen; /* Maximum length of line in bytes. */ |
Remarks
_FGets(В ) copies a line of maxlen length, delimited with a carriage return. The carriage return is translated to a null terminator and stored in the buffer. Line feeds are ignored and aren't copied into the buffer. _FGets(В ) returns the number of bytes copied to the buffer.
For more information on how to create an API library and integrate it with Visual FoxPro, see Accessing the Visual FoxPro API.
Example
The following example opens a file specified by a parameter, and copies and shows each line in the file.
Visual FoxPro Code
В | Copy Code |
---|---|
SET LIBRARY TO FGETS fc = FCREATE("x", 0) = FPUTS(fc, REPL("X", 512), 512) = FCLOSE(fc) = XFGETS("x") DELETE FILE x |
C Code
В | Copy Code |
---|---|
#include <pro_ext.h> #define BUFFSIZE 256 static char lineBuffer[BUFFSIZE]; void putLong(long n) { Value val; val.ev_type = 'I'; val.ev_long = n; val.ev_width = 10; _PutValue(&val); } FAR Example(ParamBlk FAR *parm) { FCHAN fchan; // Null terminate file name 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); ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle)) [parm->p[0].val.ev_length] = '\0'; if ((fchan=_FOpen((char FAR*)_HandToPtr(parm->p[0].val.ev_handle), FC_NORMAL)) < 0) { _UserError("Could not open file."); } _HUnLock(parm->p[0].val.ev_handle); while (!_FEOF(fchan)) { _FGets(fchan, lineBuffer, BUFFSIZE); _PutStr(lineBuffer); _PutChr('\n'); } _FClose(fchan); } FoxInfo myFoxInfo[] = { {"XFGETS", (FPFI) Example, 1, "C"}, }; FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; |