596 lines
15 KiB
C
596 lines
15 KiB
C
/************************************************************/
|
|
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
|
/************************************************************/
|
|
|
|
/* Fontdlg.c -- WRITE font dialog routines */
|
|
|
|
#define NOVIRTUALKEYCODES
|
|
#define NOWINSTYLES
|
|
#define NOSYSMETRICS
|
|
#define NOMENUS
|
|
#define NOICON
|
|
#define NOKEYSTATE
|
|
#define NOSYSCOMMANDS
|
|
#define NORASTEROPS
|
|
#define NOSHOWWINDOW
|
|
#define NOATOM
|
|
#define NOBITMAP
|
|
#define NOBRUSH
|
|
#define NOCLIPBOARD
|
|
#define NOCOLOR
|
|
#define NOCREATESTRUCT
|
|
#define NODRAWTEXT
|
|
#define NOMEMMGR
|
|
#define NOMENUS
|
|
#define NOMETAFILE
|
|
#define NOMINMAX
|
|
#define NOMSG
|
|
#define NOOPENFILE
|
|
#define NOPEN
|
|
#define NOPOINT
|
|
#define NOREGION
|
|
#define NOSCROLL
|
|
#define NOSOUND
|
|
#define NOWH
|
|
#define NOWINOFFSETS
|
|
#define NOWNDCLASS
|
|
#define NOCOMM
|
|
#include <windows.h>
|
|
|
|
#include "mw.h"
|
|
|
|
#ifndef JAPAN //T-HIROYN Win3.1
|
|
#define NOUAC
|
|
#endif
|
|
|
|
#include "cmddefs.h"
|
|
#include "dlgdefs.h"
|
|
#include "propdefs.h"
|
|
#include "fontdefs.h"
|
|
#include "prmdefs.h"
|
|
#include "str.h"
|
|
#include "docdefs.h"
|
|
#include <commdlg.h>
|
|
|
|
#ifdef JAPAN //T-HIROYN Win3.1 and added 02 Jun. 1992 by Hiraisi
|
|
#include <dlgs.h>
|
|
#include <ctype.h>
|
|
#include "kanji.h"
|
|
BOOL FAR PASCAL _export DeleteFacename( HWND , UINT , WPARAM , LPARAM );
|
|
static BOOL NEAR PASCAL KanjiCheckAddSprm(HWND, int, int);
|
|
extern int ferror; //01/21/93
|
|
#elif defined(KOREA) // jinwoo : 10/14/92 : remove @Facename
|
|
#include <dlgs.h>
|
|
BOOL FAR PASCAL _export DeleteFacename( HWND , UINT , WPARAM , LPARAM );
|
|
#endif
|
|
|
|
extern HDC vhDCPrinter;
|
|
extern struct DOD (**hpdocdod)[];
|
|
extern HANDLE hMmwModInstance;
|
|
extern HANDLE hParentWw;
|
|
extern int vfSeeSel;
|
|
extern int docCur;
|
|
extern HWND vhWndMsgBoxParent;
|
|
extern int vfCursorVisible;
|
|
extern HCURSOR vhcArrow;
|
|
|
|
extern int iszSizeEnum;
|
|
extern int iszSizeEnumMac;
|
|
extern int iszSizeEnumMax;
|
|
extern int iffnEnum;
|
|
extern int vfFontEnumFail;
|
|
extern struct FFNTB **hffntbEnum;
|
|
|
|
|
|
BOOL NEAR FValidateEnumFfid(struct FFN *);
|
|
|
|
int FAR PASCAL NewFont(HWND hwnd)
|
|
{
|
|
TSV rgtsv[itsvchMax]; /* gets attributes and gray flags from CHP */
|
|
int ftc;
|
|
int fSetUndo;
|
|
CHAR rgb[2];
|
|
CHOOSEFONT cf;
|
|
LOGFONT lf;
|
|
HDC hdc;
|
|
|
|
#if defined(JAPAN) || defined(KOREA) // added 02 Jun. 1992 by Hiraisi : jinwoo 11/10/92
|
|
FARPROC lpfnDeleteFacename;
|
|
int Result;
|
|
#endif
|
|
|
|
if (!vhDCPrinter)
|
|
return FALSE;
|
|
|
|
GetRgtsvChpSel(rgtsv);
|
|
|
|
bltbc(&lf, 0, sizeof(LOGFONT));
|
|
bltbc(&cf, 0, sizeof(CHOOSEFONT));
|
|
|
|
cf.lStructSize = sizeof(cf);
|
|
cf.hwndOwner = hwnd;
|
|
cf.lpLogFont = &lf;
|
|
cf.hDC = vhDCPrinter;
|
|
cf.nSizeMin = 4;
|
|
cf.nSizeMax = 127;
|
|
#ifdef JAPAN //#3902 T-HIROYN
|
|
cf.Flags = CF_PRINTERFONTS | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE;
|
|
#elif defined(KOREA) // MSCH bklee 01/26/95
|
|
cf.Flags = CF_NOSIMULATIONS| CF_PRINTERFONTS /*| CF_ANSIONLY*/ | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE;
|
|
#else
|
|
cf.Flags = CF_NOSIMULATIONS| CF_PRINTERFONTS | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE;
|
|
#endif
|
|
|
|
#if defined(JAPAN) || defined(KOREA) // added 02 Jun. 1992 by Hiraisi : jinwoo 11/10/92
|
|
cf.Flags |= CF_ENABLEHOOK;
|
|
lpfnDeleteFacename = MakeProcInstance( DeleteFacename, hMmwModInstance );
|
|
cf.lpfnHook = (FARPROC)lpfnDeleteFacename;
|
|
#endif
|
|
|
|
// check for multiple sizes selected
|
|
if (rgtsv[itsvSize].fGray) {
|
|
cf.Flags |= CF_NOSIZESEL;
|
|
} else {
|
|
hdc = GetDC(NULL);
|
|
lf.lfHeight = -MulDiv(rgtsv[itsvSize].wTsv / 2, GetDeviceCaps(hdc, LOGPIXELSY), 72);
|
|
ReleaseDC(NULL, hdc);
|
|
}
|
|
|
|
// check for multiple faces selected
|
|
if (rgtsv[itsvFfn].fGray) {
|
|
cf.Flags |= CF_NOFACESEL;
|
|
lf.lfFaceName[0] = 0;
|
|
} else {
|
|
struct FFN **hffn;
|
|
/* then, font name */
|
|
|
|
/* note that the value stored in rgtsv[itsvFfn].wTsv
|
|
is the font name handle, rather than the ftc */
|
|
|
|
hffn = (struct FFN **)rgtsv[itsvFfn].wTsv;
|
|
lstrcpy(lf.lfFaceName, (*hffn)->szFfn);
|
|
}
|
|
|
|
// check for multiple styles selected
|
|
if (rgtsv[itsvBold].fGray || rgtsv[itsvItalic].fGray) {
|
|
cf.Flags |= CF_NOSTYLESEL;
|
|
} else {
|
|
lf.lfWeight = rgtsv[itsvBold].wTsv ? FW_BOLD : FW_NORMAL;
|
|
lf.lfItalic = rgtsv[itsvItalic].wTsv;
|
|
}
|
|
|
|
#if defined(JAPAN) || defined(KOREA) // added 02 Jun. 1992 by Hiraisi : jinwoo 11/10/92
|
|
Result = ChooseFont(&cf);
|
|
FreeProcInstance( lpfnDeleteFacename );
|
|
if (!Result)
|
|
return FALSE;
|
|
#else
|
|
if (!ChooseFont(&cf))
|
|
return FALSE;
|
|
#endif // JAPAN
|
|
|
|
fSetUndo = TRUE;
|
|
|
|
if (!(cf.Flags & CF_NOFACESEL))
|
|
{
|
|
CHAR rgbFfn[ibFfnMax];
|
|
struct FFN *pffn = (struct FFN *)rgbFfn;
|
|
|
|
lstrcpy(pffn->szFfn, lf.lfFaceName);
|
|
pffn->ffid = lf.lfPitchAndFamily & grpbitFamily;
|
|
pffn->chs = lf.lfCharSet;
|
|
|
|
FValidateEnumFfid(pffn);
|
|
|
|
ftc = FtcChkDocFfn(docCur, pffn);
|
|
|
|
if (ftc != ftcNil) {
|
|
#ifdef JAPAN //T-HIROYN Win3.1
|
|
if ( pffn->chs == NATIVE_CHARSET ||
|
|
FALSE == KanjiCheckAddSprm(hwnd, ftc, fSetUndo) ) {
|
|
rgb[0] = sprmCFtc;
|
|
rgb[1] = ftc;
|
|
AddOneSprm(rgb, fSetUndo);
|
|
}
|
|
fSetUndo = FALSE;
|
|
if(ferror) //01/21/93
|
|
return TRUE;
|
|
#else
|
|
rgb[0] = sprmCFtc;
|
|
rgb[1] = ftc;
|
|
AddOneSprm(rgb, fSetUndo);
|
|
#ifdef KKBUGFIX
|
|
// when font name was changed we can't undo
|
|
fSetUndo = FALSE;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (!(cf.Flags & CF_NOSIZESEL)) {
|
|
/* we got a value */
|
|
rgb[0] = sprmCHps;
|
|
rgb[1] = cf.iPointSize / 10 * 2; /* KLUDGE alert */
|
|
AddOneSprm(rgb, fSetUndo);
|
|
fSetUndo = FALSE;
|
|
}
|
|
|
|
if (!(cf.Flags & CF_NOSTYLESEL)) {
|
|
#ifdef KKBUGFIX //T-HIROYN Win3.1
|
|
// when font name was changed we can't undo
|
|
ApplyCLooksUndo(sprmCBold, lf.lfWeight > FW_NORMAL, fSetUndo);
|
|
fSetUndo = FALSE;
|
|
ApplyCLooksUndo(sprmCItalic, lf.lfItalic ? 1 : 0, fSetUndo);
|
|
#else
|
|
ApplyCLooks(0, sprmCBold, lf.lfWeight > FW_NORMAL);
|
|
ApplyCLooks(0, sprmCItalic, lf.lfItalic ? 1 : 0);
|
|
#endif
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL NEAR FValidateEnumFfid(pffn)
|
|
/* if the described ffn is in the enumeration table, then make sure we have
|
|
a good family number for it */
|
|
|
|
struct FFN *pffn;
|
|
{
|
|
int ftc;
|
|
struct FFN *pffnAlready;
|
|
|
|
ftc = FtcScanFfn(hffntbEnum, pffn);
|
|
if (ftc != ftcNil)
|
|
{
|
|
pffnAlready = *((*hffntbEnum)->mpftchffn[ftc]);
|
|
#ifdef JAPAN
|
|
// Few fonts would be enumnrated with FF_DONTCARE in JAPAN
|
|
// we won't check ffid here.
|
|
#else
|
|
if (pffnAlready->ffid != FF_DONTCARE)
|
|
#endif
|
|
{
|
|
pffn->ffid = pffnAlready->ffid;
|
|
#ifdef NEWFONTENUM
|
|
pffn->chs = pffnAlready->chs;
|
|
#endif
|
|
return(TRUE);
|
|
}
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
#ifdef JAPAN //T-HIROYN Win3.1
|
|
/* When you want to change font name,
|
|
if include japanese string in select string
|
|
then don't change only japanese string
|
|
but change alpha string
|
|
*/
|
|
|
|
extern CHAR szAppName[];
|
|
extern struct SEL selCur;
|
|
extern struct CHP vchpFetch;
|
|
extern int vcchFetch;
|
|
extern int vccpFetch;
|
|
extern CHAR *vpchFetch;
|
|
extern typeCP vcpFetch;
|
|
BOOL FontChangeDBCS = FALSE; //01/21/93
|
|
|
|
static BOOL NEAR PASCAL KanjiCheckAddSprm(hwnd, alphaftc, fSetUndo)
|
|
HWND hwnd;
|
|
int alphaftc; //Not KANJI_CHARSET
|
|
int fSetUndo;
|
|
{
|
|
typeCP CpLimNoSpaces(typeCP, typeCP);
|
|
static BOOL NEAR KanjiCheckSelect();
|
|
static BOOL NEAR PASCAL GetSelCur(typeCP *, typeCP *, typeCP);
|
|
|
|
CHAR rgb[2];
|
|
struct SEL selSave;
|
|
typeCP cpLim, cpFirst, dcp, cpSt, cpEnd;
|
|
|
|
if (selCur.cpFirst == selCur.cpLim)
|
|
return(FALSE);
|
|
|
|
/* include japanese string ? */
|
|
if( KanjiCheckSelect() ) { // Yes
|
|
char szMsg[cchMaxSz];
|
|
PchFillPchId( szMsg, IDPMTNotKanjiFont, sizeof(szMsg) );
|
|
MessageBox(hwnd, (LPSTR)szMsg, (LPSTR)szAppName,
|
|
MB_OK | MB_ICONEXCLAMATION);
|
|
}
|
|
else
|
|
return(FALSE);
|
|
|
|
selSave = selCur;
|
|
|
|
cpLim = CpLimNoSpaces(selCur.cpFirst, selCur.cpLim);
|
|
|
|
cpFirst = selCur.cpFirst;
|
|
|
|
dcp = cpLim - cpFirst;
|
|
|
|
if (fSetUndo) {
|
|
SetUndo(uacReplNS, docCur, cpFirst, dcp, docNil, cpNil, dcp, 0);
|
|
fSetUndo = FALSE;
|
|
}
|
|
|
|
cpEnd = cpFirst;
|
|
|
|
FontChangeDBCS = TRUE; //01/21/93
|
|
|
|
while(TRUE) {
|
|
cpSt = cpEnd;
|
|
if( FALSE == GetSelCur(&cpSt, &cpEnd, cpLim))
|
|
break;
|
|
rgb[0] = sprmCFtc;
|
|
rgb[1] = alphaftc;
|
|
|
|
selCur.cpFirst = cpSt;
|
|
selCur.cpLim = cpEnd;
|
|
|
|
AddOneSprm(rgb, fSetUndo);
|
|
|
|
if (ferror) //01/21/93
|
|
break;
|
|
}
|
|
|
|
FontChangeDBCS = FALSE; //01/21/93
|
|
|
|
if(ferror) { //01/21/93
|
|
vfSeeSel = TRUE;
|
|
selCur.cpFirst = selCur.cpLim = cpSt;
|
|
} else {
|
|
selCur = selSave;
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
static BOOL NEAR PASCAL GetSelCur(cpSt,cpEnd,cpLim)
|
|
typeCP *cpSt, *cpEnd, cpLim;
|
|
{
|
|
static BOOL NEAR PASCAL GetSelCurStart(typeCP *, typeCP);
|
|
static void NEAR PASCAL GetSelCurEnd(typeCP *,typeCP *, typeCP);
|
|
|
|
if(FALSE == GetSelCurStart(cpSt,cpLim))
|
|
return(FALSE);
|
|
|
|
GetSelCurEnd(cpSt,cpEnd,cpLim);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
static BOOL NEAR PASCAL GetSelCurStart(cpSt,cpLim)
|
|
typeCP *cpSt, cpLim;
|
|
{
|
|
int cch;
|
|
CHAR *cp;
|
|
CHAR ch;
|
|
BOOL DBCSbundan = FALSE; // 02/12/93 bug fix
|
|
|
|
if(*cpSt == cpLim)
|
|
return(FALSE);
|
|
|
|
FetchCp(docCur, *cpSt, 0, fcmChars);
|
|
|
|
while(TRUE) {
|
|
for(cch = 0,cp = vpchFetch; cch < vccpFetch; cch++,cp++) {
|
|
|
|
if((vcpFetch + (typeCP)cch) >= cpLim)
|
|
return(FALSE);
|
|
|
|
ch = *cp;
|
|
|
|
if( FKana(ch))
|
|
;
|
|
else if( IsDBCSLeadByte(ch) ) {
|
|
cp++; cch++;
|
|
if(cch >= vccpFetch) { // 02/12/93 bug fix
|
|
DBCSbundan = TRUE;
|
|
break;
|
|
}
|
|
} else if (isprint(ch)) {
|
|
*cpSt = vcpFetch + (typeCP)cch;
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
if((vcpFetch + (typeCP)cch) >= cpLim)
|
|
return(FALSE);
|
|
|
|
if(DBCSbundan) { // 02/12/93 bug fix
|
|
FetchCp(docCur, vcpFetch + (typeCP)(cch+1), 0, fcmChars);
|
|
DBCSbundan = FALSE;
|
|
} else
|
|
FetchCp(docNil, cpNil, 0, fcmChars);
|
|
}
|
|
}
|
|
|
|
static void NEAR PASCAL GetSelCurEnd(cpSt,cpEnd,cpLim)
|
|
typeCP *cpSt, *cpEnd, cpLim;
|
|
{
|
|
int cch;
|
|
CHAR *cp;
|
|
CHAR ch;
|
|
|
|
FetchCp(docCur, *cpSt, 0, fcmChars);
|
|
|
|
while(TRUE) {
|
|
for(cch = 0,cp = vpchFetch; cch < vccpFetch; cch++,cp++) {
|
|
|
|
if((vcpFetch + (typeCP)cch) >= cpLim) {
|
|
*cpEnd = cpLim;
|
|
return;
|
|
}
|
|
|
|
ch = *cp;
|
|
if( FKana(ch) || IsDBCSLeadByte(ch) ) {
|
|
*cpEnd = vcpFetch + (typeCP)cch;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if((vcpFetch + (typeCP)cch) >= cpLim) {
|
|
*cpEnd = cpLim;
|
|
return;
|
|
}
|
|
|
|
FetchCp(docNil, cpNil, 0, fcmChars);
|
|
}
|
|
}
|
|
|
|
static BOOL NEAR KanjiCheckSelect()
|
|
{
|
|
typeCP CpLimNoSpaces(typeCP, typeCP);
|
|
typeCP cpLim;
|
|
CHAR *cp;
|
|
CHAR ch;
|
|
int cch;
|
|
|
|
cpLim = CpLimNoSpaces(selCur.cpFirst, selCur.cpLim);
|
|
// FetchCp(docCur, selCur.cpFirst, 0, fcmChars);
|
|
FetchCp(docCur, selCur.cpFirst, 0,fcmBoth + fcmParseCaps);
|
|
|
|
while(TRUE) {
|
|
if(NATIVE_CHARSET == GetCharSetFromChp(&vchpFetch)) {
|
|
for(cch = 0,cp = vpchFetch; cch < vccpFetch; cch++,cp++) {
|
|
|
|
if((vcpFetch + (typeCP)cch) >= cpLim)
|
|
return(FALSE);
|
|
|
|
ch = *cp;
|
|
if( FKana(ch) || IsDBCSLeadByte(ch) ) {
|
|
return(TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
if((vcpFetch + (typeCP)vccpFetch) >= cpLim)
|
|
return(FALSE);
|
|
|
|
FetchCp(docNil, cpNil, 0, fcmBoth + fcmParseCaps);
|
|
}
|
|
|
|
}
|
|
|
|
int FAR PASCAL GetKanjiStringLen(cch, cchF, cp)
|
|
int cch, cchF;
|
|
CHAR *cp;
|
|
{
|
|
int cblen = 0;
|
|
|
|
for (; cch+cblen < cchF; cp++ ){
|
|
if( FKana(*cp) )
|
|
cblen++;
|
|
else if( IsDBCSLeadByte(*cp) ) {
|
|
cblen += 2;
|
|
cp++;
|
|
} else
|
|
break;
|
|
}
|
|
return(cblen);
|
|
}
|
|
|
|
int FAR PASCAL GetAlphaStringLen(cch, cchF, cp)
|
|
int cch, cchF;
|
|
CHAR *cp;
|
|
{
|
|
int cblen = 0;
|
|
|
|
for (; cch+cblen < cchF; cp++ ) {
|
|
if( FKana(*cp) || IsDBCSLeadByte(*cp))
|
|
break;
|
|
else
|
|
cblen++;
|
|
}
|
|
return(cblen);
|
|
}
|
|
// 02/15/93 add T-HIROYN 2 function
|
|
int FAR PASCAL GetFtcFromPchp(pchp)
|
|
struct CHP *pchp;
|
|
{
|
|
int ftc;
|
|
ftc = pchp->ftc + (pchp->ftcXtra << 6);
|
|
return ftc;
|
|
}
|
|
|
|
int FAR PASCAL SetFtcToPchp(pchp, ftc)
|
|
struct CHP *pchp;
|
|
int ftc;
|
|
{
|
|
pchp->ftc = ftc & 0x003f;
|
|
pchp->ftcXtra = (ftc & 0x00c0) >> 6;
|
|
}
|
|
|
|
|
|
// added 02 Jun. 1992 by Hiraisi
|
|
/*
|
|
* This function deletes facename(s) with @-prefix
|
|
* from FONT combobox(cmb1) of the CHOOSEFONT dialog.
|
|
*/
|
|
BOOL FAR PASCAL _export DeleteFacename( hDlg, uMsg, wParam, lParam )
|
|
HWND hDlg;
|
|
UINT uMsg;
|
|
WPARAM wParam;
|
|
LPARAM lParam;
|
|
{
|
|
char str[50], sel[50];
|
|
int ix;
|
|
int cnt;
|
|
|
|
if( uMsg != WM_INITDIALOG )
|
|
return FALSE;
|
|
|
|
cnt = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCOUNT, 0, 0L );
|
|
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCURSEL, 0, 0L );
|
|
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)sel );
|
|
for( ix = 0 ; ix < cnt ; ){
|
|
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)str );
|
|
if( str[0] == '@' )
|
|
cnt = (int)SendDlgItemMessage( hDlg,cmb1,CB_DELETESTRING,ix,NULL );
|
|
else
|
|
ix++;
|
|
}
|
|
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_FINDSTRING, -1, (DWORD)sel );
|
|
SendDlgItemMessage( hDlg, cmb1, CB_SETCURSEL, ix, 0L );
|
|
|
|
return TRUE;
|
|
}
|
|
#elif defined(KOREA) // jinwoo : 10/14/92
|
|
// added 02 Jun. 1992 by Hiraisi
|
|
/*
|
|
* This function deletes facename(s) with @-prefix
|
|
* from FONT combobox(cmb1) of the CHOOSEFONT dialog.
|
|
*/
|
|
BOOL FAR PASCAL _export DeleteFacename( hDlg, uMsg, wParam, lParam )
|
|
HWND hDlg;
|
|
UINT uMsg;
|
|
WPARAM wParam;
|
|
LPARAM lParam;
|
|
{
|
|
char str[50], sel[50];
|
|
int ix;
|
|
int cnt;
|
|
|
|
if( uMsg != WM_INITDIALOG )
|
|
return FALSE;
|
|
|
|
cnt = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCOUNT, 0, 0L );
|
|
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_GETCURSEL, 0, 0L );
|
|
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)sel );
|
|
for( ix = 0 ; ix < cnt ; ){
|
|
SendDlgItemMessage( hDlg, cmb1, CB_GETLBTEXT, ix, (DWORD)str );
|
|
if( str[0] == '@' )
|
|
cnt = (int)SendDlgItemMessage( hDlg,cmb1,CB_DELETESTRING,ix,NULL );
|
|
else
|
|
ix++;
|
|
}
|
|
ix = (int)SendDlgItemMessage( hDlg, cmb1, CB_FINDSTRING, -1, (DWORD)sel );
|
|
SendDlgItemMessage( hDlg, cmb1, CB_SETCURSEL, ix, 0L );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|