⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rcp2c.c

📁 关于rcp2c_v3.rar协议在LINUX下的实现程序
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -