📄 rcp2c.c
字号:
BOOL leftAnchor;
int frame;
BOOL enabled;
BOOL on; /* checked */
BOOL editable;
BOOL underlined;
BOOL singleLine;
BOOL dynamicSize;
BOOL vertical; /* RMa add: slider */
BOOL graphical; /* RMa add: slider */
int justification;
int maxChars;
int autoShift;
BOOL hasScrollBar;
BOOL numeric;
int numItems;
int cvis;
int group;
char *szGroupIdName;
int font;
int rscID;
char *szRscIdName;
BOOL modal;
BOOL saveBehind;
int helpId;
char *szHelpIdName;
int defaultBtnId;
char *szDefaultBtnIdName;
int menuId;
char *szMenuIdName;
int numRows;
int numColumns;
int rgdxcol[64];
int value; /* scrollbar */
int minValue; /* scrollbar */
int maxValue; /* scrollbar */
int pageSize; /* scrollbar */
int thumbid; /* RMa add: slider */
char *szThumIdName;
int backgroundid; /* RMa add: slider */
BOOL feedback; /* RMa add: slider */
int bitmapid; /* RMa add: graphical button */
char *szBitmapIdName;
int selectedbitmapid; /* RMa add: graphical button */
char *szSelectedBitmapIdName;
int version; /* RMa add: GraffitiInputArea 'silk' */
char *creator; /* RMa add: GraffitiInputArea 'silk' */
char *language; /* RMa add: GraffitiInputArea 'silk' */
char *country; /* RMa add: GraffitiInputArea 'silk' */
int areaType; /* RMa add: GraffitiInputArea 'silk' */
int areaIndex; /* RMa add: GraffitiInputArea 'silk' */
int keyDownChr; /* RMa add: GraffitiInputArea 'silk' */
int keyDownKeyCode; /* RMa add: GraffitiInputArea 'silk' */
int keyDownModifiers; /* RMa add: GraffitiInputArea 'silk' */
int Number; /* RMa add: country 'cnty' */
char *Name; /* RMa add: country 'cnty' */
int DateFormat; /* RMa add: country 'cnty' */
int LongDateFormat; /* RMa add: country 'cnty' */
int WeekStartDay; /* RMa add: country 'cnty' */
int TimeFormat; /* RMa add: country 'cnty' */
int NumberFormat; /* RMa add: country 'cnty' */
char *CurrencyName; /* RMa add: country 'cnty' */
char *CurrencySymbol; /* RMa add: country 'cnty' */
char *CurrencyUniqueSymbol; /* RMa add: country 'cnty' */
int CurrencyDecimalPlaces; /* RMa add: country 'cnty' */
int DaylightSavings; /* RMa add: country 'cnty' */
int MinutesWestOfGmt; /* RMa add: country 'cnty' */
int MeasurementSystem; /* RMa add: country 'cnty' */
int DefaultItem; /* RMa add: 'DLST' & 'BLST' */
}
ITM;
/*
* Item Flags
*/
#define ifNull 0x00000000
#define ifText 0x00000001
#define ifMultText 0x00000002
#define ifId 0x00000004
#define ifRc 0x00000008
#define ifPt 0x00000010
#define ifUsable 0x00000020
#define ifAnchor 0x00000040
#define ifFrame 0x00000080
#define ifEnabled 0x00000100
#define ifOn 0x00000200
#define ifEditable 0x00000400
#define ifSingleLine 0x00000800
#define ifDynamicSize 0x00001000
#define ifMaxChars 0x00002000
#define ifCvis 0x00004000
#define ifGroup 0x00008000
#define ifFont 0x00010000
#define ifAlign 0x00020000
#define ifUnderlined 0x00040000
#define ifListId 0x00080000
#define ifBitmap 0x00100000
/*
* Form ifs
*/
#define ifModal 0x00200000
#define ifSaveBehind 0x00400000
#define ifHelpId 0x00800000
#define ifDefaultBtnId 0x01000000
#define ifMenuId 0x02000000
/*
* Ifs defining margins -- extra width to add to an item in addition to it's string width
*/
#define ifSmallMargin 0x80000000
#define ifBigMargin 0x40000000
/*
* if2s -- ran out of bits in if!
*/
#define if2Null 0x00000000
#define if2NumColumns 0x00000001
#define if2NumRows 0x00000002
#define if2ColumnWidths 0x00000004
#define if2Value 0x00000008
#define if2MinValue 0x00000010
#define if2MaxValue 0x00000020
#define if2PageSize 0x00000040
#define if2AutoShift 0x00000080
#define if2Scrollbar 0x00000100
#define if2Numeric 0x00000200
#define if2Type 0x00000800 /* RMa add */
#define if2File 0x00001000 /* RMa add */
#define if2CreatorID 0x00002000 /* RMa add */
#define if2AppType 0x00004000 /* RMa add */
#define if2CreateTime 0x00008000 /* RMa add */
#define if2ModTime 0x00010000 /* RMa add */
#define if2BackupTime 0x00020000 /* RMa add */
#define if2AppInfo 0x00040000 /* RMa add */
#define if2SortInfo 0x00080000 /* RMa add */
#define if2ReadOnly 0x00100000 /* RMa add */
#define if2Backup 0x00200000 /* RMa add */
#define if2CopyProtect 0x00400000 /* RMa add */
#define if2Version 0x00800000 /* RMa add */
#define if2ThumbID 0x01000000 /* RMa add */
#define if2BackgroundID 0x02000000 /* RMa add */
#define if2Vertical 0x04000000 /* RMa add */
#define if2Graphical 0x08000000 /* RMa add */
#define if2BitmapID 0x10000000 /* RMa add */
#define if2SelectedBitmapID 0x20000000 /* RMa add */
#define if2Feedback 0x40000000 /* RMa add */
/*
* if3s -- ran out of bits in if and if2! RMa add
*/
#define if3Null 0x00000000
#define if3Vers 0x00000001
#define if3Creator 0x00000002
#define if3Language 0x00000004
#define if3Country 0x00000008
#define if3areaType 0x00000010
#define if3areaIndex 0x00000020
#define if3keyDownChr 0x00000040
#define if3keyDownKeyCode 0x00000080
#define if3keyDownModifiers 0x00000100
#define if3Number 0x00000200
#define if3Name 0x00000400
#define if3DateFormat 0x00000800
#define if3LongDateFormat 0x00001000
#define if3WeekStartDay 0x00002000
#define if3TimeFormat 0x00004000
#define if3NumberFormat 0x00008000
#define if3CurrencyName 0x00010000
#define if3CurrencySymbol 0x00020000
#define if3CurrencyUniqueSymbol 0x00040000
#define if3CurrencyDecimalPlaces 0x00080000
#define if3DayLightSaving 0x00100000
#define if3MinutesWestOfGmt 0x00200000
#define if3MeasurementSystem 0x00400000
#define if3DefaultItm 0x00800000
/*
* Semi-arbitrary margins
*/
#define dxObjSmallMargin 3
#define dxObjBigMargin 6
/*-----------------------------------------------------------------------------
| WResolveK
|
| Resolve a Konstant to it's real value, returning it.
-------------------------------------------------------------WESC------------*/
int
WResolveK(K * pk,
ITM * pitm,
int dxyExtent,
BOOL fHoriz)
{
int wVal;
int dxyCenterAcross;
switch (pk->kt)
{
default:
Assert(fFalse);
return 0;
case ktConst:
return pk->wVal;
case ktAuto:
if (fHoriz)
{
wVal = DxCalcExtent((unsigned char *)pitm->text, pitm->font);
if (pitm->grif & ifSmallMargin)
wVal += 2 * dxObjSmallMargin;
if (pitm->grif & ifBigMargin)
wVal += 2 * dxObjBigMargin;
}
else
wVal = DyFont(pitm->font) + 1;
return wVal;
case ktCenter:
if (fHoriz)
dxyCenterAcross = PBAFIELD(vpfrm, form.window.windowBounds.extent.x);
else
dxyCenterAcross = PBAFIELD(vpfrm, form.window.windowBounds.extent.y);
wVal = (dxyCenterAcross - dxyExtent) / 2;
return wVal;
case ktCenterAt:
dxyCenterAcross = pk->wVal;
wVal = (dxyCenterAcross - dxyExtent) / 2;
return wVal;
case ktRightAt:
case ktBottomAt:
wVal = pk->wVal - dxyExtent;
return wVal;
}
Assert(fFalse);
}
/*-----------------------------------------------------------------------------
| ResolveKrcKpt
|
| Resolve a Krc and/or Kpt, setting rcPrev
-------------------------------------------------------------WESC------------*/
VOID
ResolveKrcKpt(ITM * pitm)
{
if (pitm->grif & ifRc)
{
pitm->rc.extent.x = WResolveK(&pitm->krc.kptExtent.kX, pitm, 0, fTrue);
pitm->rc.extent.y = WResolveK(&pitm->krc.kptExtent.kY, pitm, 0, fFalse);
pitm->rc.topLeft.x =
WResolveK(&pitm->krc.kptUpperLeft.kX, pitm, pitm->rc.extent.x, fTrue);
pitm->rc.topLeft.y =
WResolveK(&pitm->krc.kptUpperLeft.kY, pitm, pitm->rc.extent.y, fFalse);
rcPrev = pitm->rc;
}
if (pitm->grif & ifPt)
{
K kT;
int xT;
int yT;
kT.kt = ktAuto;
xT = WResolveK(&kT, pitm, 0, fTrue);
yT = WResolveK(&kT, pitm, 0, fFalse);
pitm->pt.x = WResolveK(&pitm->kpt.kX, pitm, xT, fTrue);
pitm->pt.y = WResolveK(&pitm->kpt.kY, pitm, yT, fFalse);
rcPrev.topLeft = pitm->pt;
rcPrev.extent.x = xT;
rcPrev.extent.y = yT;
}
}
/*-----------------------------------------------------------------------------
| DoCheckGrif
|
| Check if ifP is set in grif -- error if not
-------------------------------------------------------------WESC------------*/
VOID
DoCheckGrif(int grif,
int ifP)
{
if (!(grif & ifP))
{
ErrorLine2(tok.lex.szId, "unexpected");
}
}
/*-----------------------------------------------------------------------------
| WGetId
|
| Parse ID <const>
-------------------------------------------------------------WESC------------*/
int
WGetId(char *szErr,
BOOL fAutoIDOk,char * szIdName)
{
int w;
fAutoIDOk = fAutoIDOk; /* shut up whiney compilers */
if (!FGetTok(&tok))
return 0;
if (tok.rw == rwAutoId)
{
w = IdGetAutoId();
sprintf(szIdName,"AutoID_%d",w);
}
else
{
if (tok.rw != rwId)
UngetTok();
w = WGetConstEx(szErr,szIdName);
}
if ((!vfAllowEditIDs) && ((w >= idPalmOSReservedMin) ||
(w >= idPalmOSReservedMinWithEditIDs)))
WarningLine("ID conflicts with reserved ID range (0-9999 only)");
return w;
}
#define CheckGrif(ifP) do {DoCheckGrif(pitm->grif, ifP); pitm->grifOut |= ifP;} while (0);
#define CheckGrif2(ifP) do {DoCheckGrif(pitm->grif2, ifP); pitm->grif2Out |= ifP;} while (0);
#define CheckGrif3(ifP) do {DoCheckGrif(pitm->grif3, ifP); pitm->grif3Out |= ifP;} while (0);
/*-----------------------------------------------------------------------------
| ParseItm
|
| Parse an item in a form
| Arguments:
| ITM *pitm
| int grif : valid attributes for this item
| int grif2: more valid attributes for this item
-------------------------------------------------------------WESC------------*/
void
ParseItm(ITM * pitm,
int grif,
int grif2,
int grif3)
{
BOOL fAt;
int icol;
memset(pitm, 0, sizeof(ITM));
pitm->grif = grif;
pitm->grif2 = grif2;
pitm->grif3 = grif3;
/*
* defaults
*/
if (!vfPalmRez)
{
pitm->usable = 1;
pitm->frame = 1;
pitm->justification = leftAlign;
pitm->singleLine = 1;
pitm->editable = 1;
pitm->saveBehind = 1;
pitm->leftAnchor = 1;
}
pitm->cvis = -1; // RNi
pitm->enabled = 1; // RMa Must be a default value no tag in PilRC do do that
if (grif & ifText)
{
pitm->grifOut |= ifText;
pitm->text = PchGetSz("item string");
pitm->cbText = strlen(pitm->text) + 1;
}
if (grif & ifMultText)
{
char *pch;
char rgb[16384];
pitm->grifOut |= ifMultText;
GetExpectLt(&tok, ltStr, "text");
pch = rgb;
for (;;)
{
strcpy(pch, tok.lex.szId);
if (*pch) // RMa add test. Bug in LIST with no element pitm->numItems must = 0
pitm->numItems++; // RMa must be re-tested
pch = pch + strlen(tok.lex.szId) + 1;
if (!FGetTok(&tok))
return;
if (tok.lex.lt != ltStr)
break;
}
pitm->text = malloc(pch - rgb);
pitm->cbText = pch - rgb;
memcpy(pitm->text, rgb, pch - rgb);
UngetTok();
}
if (grif & ifId)
{
pitm->grifOut |= ifId;
pitm->id = WGetId("ItemId", fTrue,szIdNameBuf);
pitm->szIdName=strdup(szIdNameBuf);
}
if (grif & ifListId)
{
pitm->grifOut |= ifListId;
pitm->listid = WGetConstEx("ListId",szIdNameBuf);
pitm->szListidName=strdup(szIdNameBuf);
}
fAt = fFalse;
if (grif & (ifRc | ifPt))
{
if (!FGetTok(&tok))
return;
if (tok.rw == rwAt)
{
fAt = fTrue;
GetExpectLt(&tok, ltLParen, "(");
}
else
UngetTok();
}
if (grif & ifRc)
{
pitm->grifOut |= ifRc;
ParseKrc(&pitm->krc);
}
if (grif & ifPt)
{
pitm->grifOut |= ifPt;
ParseKpt(&pitm->kpt);
}
if (fAt)
GetExpectLt(&tok, ltRParen, ")");
while (FGetTok(&tok))
{
switch (tok.rw)
{
default:
ResolveKrcKpt(pitm);
UngetTok();
return;
case rwUsable:
case rwNonUsable:
CheckGrif(ifUsable);
pitm->usable = tok.rw == rwUsable;
break;
case rwLeftAnchor: /* default? */
case rwRightAnchor:
CheckGrif(ifAnchor);
pitm->leftAnchor = tok.rw == rwLeftAnchor;
break;
case rwGroup:
CheckGrif(ifGroup);
pitm->group = WGetConstEx("GroupId",szIdNameBuf);
pitm->szGroupIdName=strdup(szIdNameBuf);
break;
case rwFont: /* Add rwBoldFont, rwLargeFont? */
CheckGrif(ifFont);
pitm->font = WGetConstEx("FontId",NULL);
break;
case rwFrame: /* BUG! other frame types */
case rwNoFrame:
CheckGrif(ifFrame);
pitm->frame = tok.rw == rwFrame;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -