which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5943 c028cbd2-c16b-5b4b-a496-9718f37d4682
320 lines
10 KiB
Plaintext
Executable File
320 lines
10 KiB
Plaintext
Executable File
README.TXT
|
|
**********************************************************
|
|
Microsoft(R) FoxPro(R) Version 2.5
|
|
Library Construction Kit for Windows(TM)and MS-DOS(R)
|
|
|
|
(C)1993 Microsoft Corporation. All Rights Reserved.
|
|
|
|
This file contains additions and corrections to the
|
|
FoxPro Library Construction Kit Developer's Guide.
|
|
|
|
**********************************************************
|
|
========
|
|
CONTENTS
|
|
========
|
|
|
|
Part Description
|
|
---- -----------
|
|
|
|
1 Additions to Documentation Since Printing
|
|
2 Corrections to Documentation Since Printing
|
|
|
|
----------------------------------------------------------
|
|
=================================================
|
|
Part 1: Additions to Documentation Since Printing
|
|
=================================================
|
|
|
|
The EXAMPLES directory contains a FoxPro database with all
|
|
the example code that is used in the manual. Simply
|
|
search for the function with example code you wish to
|
|
copy and then extract the code from the memo field. You
|
|
are free to use this code in your own applications.
|
|
|
|
-----------------------------------------------------------
|
|
|
|
The following function has been added:
|
|
|
|
WHANDLE _WMainWindow( )
|
|
|
|
Description:
|
|
_WMainWindow( ) returns the WHANDLE of the main FoxPro
|
|
window in FoxPro for Windows or of the FoxPro desktop
|
|
in FoxPro for MS-DOS.
|
|
|
|
Example:
|
|
The following example writes a message to the main FoxPro
|
|
window in FoxPro for Windows or to the FoxPro desktop in
|
|
FoxPro for MS-DOS.
|
|
|
|
FoxPro Code:
|
|
|
|
SET LIBRARY TO WMAIN
|
|
= EXWMAIN()
|
|
|
|
C Code:
|
|
|
|
#include <pro_ext.h>
|
|
|
|
void FAR example(ParamBlk FAR *parm)
|
|
{
|
|
WHANDLE wh = _WMainWindow();
|
|
_WPutStr(wh, "\nThis is the main FoxPro window or desktop.");
|
|
}
|
|
|
|
FoxInfo myFoxInfo[] = {
|
|
{"EXWMAIN", example, 0, ""},
|
|
};
|
|
|
|
FoxTable _FoxTable = {
|
|
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
|
|
};
|
|
|
|
----------------------------------------------------------
|
|
===================================================
|
|
Part 2: Corrections to Documentation Since Printing
|
|
===================================================
|
|
|
|
Page 2: In the Reverse.C example:
|
|
|
|
The comment "/* Check to see if we can allocate the memory
|
|
needed. */" is missing the end comment marker */.
|
|
|
|
The three-line comment "Since this routine doesn't call
|
|
any functions that cause memory reorganization . . .
|
|
prior to de-referencing them (_HandToPtr)" is missing the
|
|
single line comment marker // in the second and third
|
|
lines.
|
|
|
|
This statement:
|
|
|
|
for (i = 0; i << parm->p[0].val.ev_length; i++)
|
|
*(out_string--) = *(in_string++);
|
|
|
|
should be:
|
|
|
|
for (i = 0; i < parm->p[0].val.ev_length; i++)
|
|
*(out_string--) = *(in_string++);
|
|
|
|
Change the "<<" in the original example to "<".
|
|
|
|
----------------------------------------------------------
|
|
Page 5: The Value Structure Fields table should include
|
|
the General FoxPro data type. The applicable fields and
|
|
their values are listed below:
|
|
|
|
val.ev_type = 'G'
|
|
val.ev_width = FCHAN
|
|
val.ev_long = length of general field
|
|
val.ev_real = offset of general field
|
|
|
|
----------------------------------------------------------
|
|
Page 6: The data type FPFI, a FAR pointer to a function
|
|
returning Int, is mistakenly listed as "FPDI".
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 7: In addition to the Point, Rect and EventRec data
|
|
structures, PointP and RectP should be included. PointP
|
|
and RectP are identical to Point and Rect except that
|
|
Point and Rect coordinates are in rows and columns while
|
|
PointP and RectP coordinates are in pixels.
|
|
|
|
----------------------------------------------------------
|
|
Page 12: The example
|
|
|
|
if (parm->p[0].val.ev_type='C'
|
|
x=parm->p[0].val.ev_length
|
|
|
|
should be:
|
|
|
|
if (parm->p[0].val.ev_type=='C')
|
|
x=parm->p[0].val.ev_length;
|
|
|
|
Use an expression ==, a closed parenthesis at the end of
|
|
the first line, and a semicolon at the end of the second
|
|
line.
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 22: When compiling a .PLB library in Microsoft C7 or
|
|
Visual C/C++, you need to use the following command line:
|
|
|
|
CL /O /ALw /Zp /GW
|
|
|
|
When linking a .PLB library in Microsoft C7 or C8, you
|
|
need to use the /NOE and /NONULLS switches.
|
|
|
|
Leaving out /NOE can cause redefinition errors. Leaving
|
|
out /NONULLS will cause FoxPro not to recognize the .PLB
|
|
as a valid library.
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 25: The section heading for the makefile on this page
|
|
is incorrect. It should say "Microsoft C/C++ Makefile for
|
|
MS-DOS" instead of "WATCOM C Makefile for MS-DOS."
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 26: The makefile on this page should have the
|
|
following section heading: "WATCOM C Makefile for MS-DOS."
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 39: The example doesn't work as intended in all
|
|
cases. To have it work, you need to change the following
|
|
line:
|
|
|
|
(( char FAR *) _HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';
|
|
|
|
to:
|
|
|
|
(( char FAR *) _HandToPtr(p0.ev_handle))[p0.ev_length - 1] = '\0';
|
|
(( char FAR *) _HandToPtr(p1.ev_handle))[p1.ev_length - 1] = '\0';
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 85: The following information applies to the
|
|
_DBSeek( ) function: The struct Value passed to _DBSeek( )
|
|
(via a pointer) must be of ev_type == 'N' when seeking a
|
|
numeric field even if that field has 0 decimal digits.
|
|
If the struct Value has an ev_type of 'I', _DBSeek( )will
|
|
return the internal error number -302, "Data type
|
|
mismatch."
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 109: The struct EDENV documented with _EdGetEnv( ) isn't
|
|
correct. The actual structure from PRO_EXT.H appears
|
|
as follows:
|
|
|
|
NOTE: (R) indicates that this member is read-only and
|
|
can't be set using _EdSetEnv( ).
|
|
|
|
(B) indicates that these members takes on one of
|
|
two Boolean values: 1 = true or 0 = false.
|
|
|
|
|
|
typedef struct
|
|
{
|
|
char filename[MAXFILENAME]; // (R)
|
|
EDPOS length; // # of bytes in text. (R)
|
|
unsigned short lenLimit; // Max allowable length. 0 = infinite.
|
|
|
|
unsigned short dirty, // Has the file been changed? (R, B)
|
|
autoIndent, // Auto indent? (B)
|
|
backup, // Make backup files? (B)
|
|
addLineFeeds, // Add line feeds when saving? (B)
|
|
autoCompile, // Shall we auto compile this thing? (B)
|
|
addCtrlZ, // Add end of file ctrl-z? (B)
|
|
savePrefs, // Save edit preferences? (B)
|
|
dragAndDrop, // Allow drag-and-drop. (B)
|
|
readOnly, // 0 = not r/o, 1 = file is r/o,
|
|
// 2 = file is r/w, opened r/o,
|
|
// 3 = file is r/o, opened r/o. (R)
|
|
status, // Display status bar? (B)
|
|
lockPrefs, // Can update the preferences ? (B)
|
|
insertMode; // (B)
|
|
|
|
short wrap; // If < 0, new line at Return only.
|
|
EDPOS selStart; // Selection start. (R)
|
|
EDPOS selEnd; // Selection end. (R)
|
|
EDPOS selAnchor; // Selection anchor point. (R)
|
|
short justMode; // Justification (0 = left, 1 = right, 2 = center).
|
|
short tabWidth; // TAB size in spaces.
|
|
|
|
char fontName[MAXFONTNAME];
|
|
short fontSize;
|
|
short fontStyle; // 0 = plain, 1 = bold, 2 = italic, 3 = bold italic.
|
|
short kind; // Kind of editor session; EDCOMMAND, EDPROGRAM, etc.
|
|
// defined in pro_ext.h. (R)
|
|
} EDENV;
|
|
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 122: The syntax for _EdOpenFile() is missing the
|
|
"mode" argument. It should read:
|
|
|
|
_EdOpenFile(TEXT *filename, int mode)
|
|
|
|
TEXT *filename; /* File to open. */
|
|
int mode; /* Mode option. */
|
|
|
|
The following Mode options are available:
|
|
FO_READONLY, FO_WRITEONLY, FO_READWRITE.
|
|
|
|
----------------------------------------------------------
|
|
|
|
Page 315: zoomEvent is a FoxPro for MS-DOS event. You
|
|
can't trap for this event in FoxPro for Windows.
|
|
|
|
----------------------------------------------------------
|
|
|
|
In an EventHandler in the FoxPro for Windows Library
|
|
Construction Kit, if you make a call to FoxPro which
|
|
generates another event, the original event record may be
|
|
changed. This won't happen in the FoxPro for MS-DOS
|
|
Library Construction Kit. The following example
|
|
illustrates this:
|
|
|
|
#include <pro_ext.h>
|
|
|
|
int g_eventid = 0; // Our event handler.
|
|
|
|
FAR EventHandler(WHandle theWindow, EventRec FAR *ev)
|
|
{
|
|
Point pt;
|
|
switch (ev->what) // Determine the event type.
|
|
{
|
|
case keyDownEvent:
|
|
if (theWindow == _WMainWindow())
|
|
return NO;
|
|
else
|
|
{
|
|
pt.h = 35;
|
|
pt.v = 10;
|
|
|
|
// This causes the event handler to be re-entered.
|
|
_WSize(theWindow, pt);
|
|
}
|
|
_PutStr("\nDone with the keyDownEvent");
|
|
break;
|
|
|
|
case sizeEvent:
|
|
_PutStr("\nSize Event received.");
|
|
break;
|
|
|
|
default:
|
|
return NO;
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
FAR EventExit()
|
|
{
|
|
_DeActivateHandler(g_eventid); // Get rid of our event handler.
|
|
}
|
|
|
|
|
|
FAR Quotes(ParamBlk FAR *parm)
|
|
{
|
|
// Set up our event handler.
|
|
g_eventid = _ActivateHandler(EventHandler);
|
|
}
|
|
|
|
|
|
FoxInfo myFoxInfo[] = {
|
|
{"QUOTES", Quotes, 0, ""},
|
|
{"EVENTEXIT", EventExit, CALLONUNLOAD, ""}
|
|
};
|
|
|
|
FoxTable _FoxTable = {
|
|
(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo
|
|
};
|
|
|
|
----------------------------------------------------------
|
|
|
|
=================
|
|
End of README.TXT
|
|
================= |