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

📄 output.c

📁 关于rcp2c_v3.rar协议在LINUX下的实现程序
💻 C
📖 第 1 页 / 共 4 页
字号:
          {
            WriteSpace(gv_pfOutput_C, gv_StartColumn);
            fprintf(gv_pfOutput_C, "\"%s\",\n", pObjText);
            if (MaxListItemLen < strlen(pObjText))
              MaxListItemLen = strlen(pObjText);
            pObjText += strlen(pObjText) +1;
          }
          gv_StartColumn -= TAB_SIZE;
          WriteSpace(gv_pfOutput_C, gv_StartColumn);
          fprintf(gv_pfOutput_C, "},\n");
          // Write List item ptr
          WriteSpace(gv_pfOutput_C, gv_StartColumn);
          fprintf(gv_pfOutput_C, "{ // Char *%s_str[%d]\n",szIdName,PBAFIELD(ObjInfo.pObj->list, numItems));
          gv_StartColumn += TAB_SIZE;
          for (i = 0; i < PBAFIELD(ObjInfo.pObj->list, numItems); i++)
          {
            WriteSpace(gv_pfOutput_C, gv_StartColumn);
            fprintf(gv_pfOutput_C, "(void*)%s.%s_str_array[%d],\n", szFormName,szIdName, i);
          }
        }
        else
        {
          WriteSpace(gv_pfOutput_C, gv_StartColumn);
          fprintf(gv_pfOutput_C, "\"\",\n");
        }
        gv_StartColumn -= TAB_SIZE;
        WriteSpace(gv_pfOutput_C, gv_StartColumn);
        fprintf(gv_pfOutput_C, "},\n");
      }
    }
    // Write H file
    fprintf(gv_pfOutput_H, "\n");
    WriteSpace(gv_pfOutput_H, TAB_SIZE);
    fprintf(gv_pfOutput_H, "%s %s;\n",
            gv_FormObjInfo[ObjInfo.ObjType].pObjTypeName, szIdName
           );
    if (pObjText)
    {
      if (ObjInfo.ObjType != frmListObj)
      {
        WriteSpace(gv_pfOutput_H, TAB_SIZE);
        fprintf(gv_pfOutput_H, "Char %s_str[%d+1]", szIdName, strlen(pObjText));
      }
      else
      {
        WriteSpace(gv_pfOutput_H, TAB_SIZE);
        fprintf(gv_pfOutput_H, "Char %s_str_array[%d][%d+1]", szIdName, 
          PBAFIELD(ObjInfo.pObj->list, numItems), MaxListItemLen);
        fprintf(gv_pfOutput_H, ";\n");
        WriteSpace(gv_pfOutput_H, TAB_SIZE);
        fprintf(gv_pfOutput_H, "Char *%s_str[%d]",szIdName, PBAFIELD(ObjInfo.pObj->list, numItems));
      }
      fprintf(gv_pfOutput_H, ";\n");
    }
  }

  EndOutputFile_H(pFrm);
  EndOutputFile_C();
}
/////////////////////////
void InitOutputFile_C(void)
{  
  fprintf(gv_pfOutput_C, "#include \"%s\"\n", gv_OutFileName_H);
}

void BeginOutputFile_C(FRM *pFrm)
{ int i, ObjCount;
  RCFORMOBJLIST *pObjList;

  sprintf(szFormName,"%s_%s",gv_IDPrefix, PBAFIELD(pFrm,form.szFormIdName));

  //save Form define info for resource
  sprintf(szDefineInfoBuf,"{kFormRscType,%s_ID_%s,(void*)&%s,sizeof(%s)},",gv_IDPrefix,
    PBAFIELD(pFrm,form.szFormIdName),szFormName,szFormName);
  if(nFormDefineInfoCount==MAX_OBJECT)
  {
      char lpBuf[1024];
      sprintf(lpBuf,"Error: %s: Exceed form number limit,max number is %d.",
          PBAFIELD(pFrm,form.szFormIdName),MAX_OBJECT);
      Error(lpBuf);
      return;
  }
  pFormDefineInfo[nFormDefineInfoCount]=strdup(szDefineInfoBuf);
  nFormDefineInfoCount++;

  fprintf(gv_pfOutput_C, "\nconst %s_Type   %s =\n{\n",
          szFormName, szFormName);
  // Init form struct
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{ // FormType form\n");
  gv_StartColumn += TAB_SIZE;
  // Init form --- window struct
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{ // WindowType window\n");
  gv_StartColumn += TAB_SIZE;

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // Coord displayWidthV20\n", PBAFIELD(pFrm, form.window.displayWidth));
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // Coord displayHeightV20\n", PBAFIELD(pFrm, form.window.displayHeight));
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // grafPort *drawPortP\n", 0);//PBAFIELD(pFrm, form.window.displayAddr));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{ // WindowFlagsType windowFlags\n");
  gv_StartColumn += TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 format :1\n", 0);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 offscreen :1\n", 0);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 modal :1\n", PBAFIELD(pFrm, form.window.windowFlags.modal));
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 focusable :1\n", PBAFIELD(pFrm, form.window.windowFlags.focusable));
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 enabled :1\n", 0);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 visible :1\n", 0);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 dialog :1\n", PBAFIELD(pFrm, form.window.windowFlags.dialog));
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 freeBitmap :1\n", 0);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 reserved :8\n", 0);
  gv_StartColumn -= TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{%d, %d, %d, %d}, // RectangleType windowBounds\n",
          PBAFIELD(pFrm, form.window.windowBounds.topLeft.x),
          PBAFIELD(pFrm, form.window.windowBounds.topLeft.y),
          PBAFIELD(pFrm, form.window.windowBounds.extent.x),
          PBAFIELD(pFrm, form.window.windowBounds.extent.y)
         );
  
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{%d, %d, %d, %d}, // rect clippingBounds\n", 0, 0, 0, 0);

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // BitmapType *bitmapP\n", 0);
  
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{{%d, %d, %d, %d, %d}}, // FrameBitsType frameType\n",
          PBAFIELD(pFrm, form.window.frameType.cornerDiam), 0,
          PBAFIELD(pFrm, form.window.frameType.threeD),
          PBAFIELD(pFrm, form.window.frameType.shadowWidth),
          PBAFIELD(pFrm, form.window.frameType.width)
         );
  
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // DrawStateType *penStateP\n", 0);
  
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // struct WindowType *nextWindow\n", 0);
  
  gv_StartColumn -= TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  // Continue Init form struct
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  //fprintf(gv_pfOutput_C, "%d, // UInt16 formId\n", PBAFIELD(pFrm, form.formId));
  fprintf(gv_pfOutput_C, "%s_ID_%s, // UInt16 formId\n", gv_IDPrefix,PBAFIELD(pFrm, form.szFormIdName));

  // Init form --- FormAttrType struct
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{ // FormAttrType attr\n");
  gv_StartColumn += TAB_SIZE;

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 usable :1\n", PBAFIELD(pFrm, form.attr.usable));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 enabled :1\n", PBAFIELD(pFrm, form.attr.enabled));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 visible :1\n", PBAFIELD(pFrm, form.attr.visible));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 dirty :1\n", PBAFIELD(pFrm, form.attr.dirty));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 saveBehind :1\n", PBAFIELD(pFrm, form.attr.saveBehind));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 graffitiShift :1\n", PBAFIELD(pFrm, form.attr.graffitiShift));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 globalsAvailable :1\n", PBAFIELD(pFrm, form.attr.globalsAvailable));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 doingDialog :1\n", PBAFIELD(pFrm, form.attr.doingDialog));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 exitDialog :1\n", PBAFIELD(pFrm, form.attr.exitDialog));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 attnIndicator :1\n", 0);//PBAFIELD(pFrm, form.attr.attnIndicator));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 reserved :6\n", 0);//PBAFIELD(pFrm, form.attr.reserved));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 reserved2\n", 0);//PBAFIELD(pFrm, form.attr.reserved2));
  
  gv_StartColumn -= TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  // Continue Init form struct
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // WinHandle bitsBehindForm\n", 0);//PBAFIELD(pFrm, form.bitsBehindForm));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // FormEventHandlerType handler\n", 0);//PBAFIELD(pFrm, form.handler));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "0x%X, // UInt16 focus\n", 0);//PBAFIELD(pFrm, form.focus));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
//  fprintf(gv_pfOutput_C, "%d, // UInt16 defaultButton\n", PBAFIELD(pFrm, form.defaultButton));
  if(PBAFIELD(pFrm, form.szDefaultButtonIdName))
    fprintf(gv_pfOutput_C, "%s_ID_%s_%s, // UInt16 defaultButton\n",
            gv_IDPrefix,szFormName,PBAFIELD(pFrm, form.szDefaultButtonIdName));
  else
    fprintf(gv_pfOutput_C, "0x0, // UInt16 defaultButton\n");

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
//  fprintf(gv_pfOutput_C, "%d, // UInt16 helpRscId\n", PBAFIELD(pFrm, form.helpRscId));
  if(PBAFIELD(pFrm, form.szHelpRscIdName))
    fprintf(gv_pfOutput_C, "%s_ID_%s, // UInt16 helpRscId\n",
            gv_IDPrefix,PBAFIELD(pFrm, form.szHelpRscIdName));
  else
    fprintf(gv_pfOutput_C, "0x0, // UInt16 helpRscId\n");

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
//  fprintf(gv_pfOutput_C, "%d, // UInt16 menuRscId\n", PBAFIELD(pFrm, form.menuRscId));
  if(PBAFIELD(pFrm, form.szMenuRscIdName))
    fprintf(gv_pfOutput_C, "%s_ID_%s, // UInt16 menuRscId\n",
            gv_IDPrefix,PBAFIELD(pFrm, form.szMenuRscIdName));
  else
    fprintf(gv_pfOutput_C, "0x0, // UInt16 menuRscId\n");

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "%d, // UInt16 numObjects\n", PBAFIELD(pFrm, form.numObjects));

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "(void*)%s." NAME_FORM_OBJLIST ", // FormObjListType *objects\n",szFormName);

  gv_StartColumn -= TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  // Init form obj list struct
  ObjCount = PBAFIELD(pFrm, form.numObjects);

  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "{ // " NAME_FORM_OBJLIST_TYPE "\n", ObjCount);
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "  // UInt8 objectType; UInt8 reserved; FormObjectType object;\n");
  
  gv_StartColumn += TAB_SIZE;
  for (i = 0; i < ObjCount; i++)
  {
    char szIdName[1024];
    char *pTemp;
    pObjList = PlexGetElementAt(&PBAFIELD16(pFrm, pllt), i);

    WriteSpace(gv_pfOutput_C, gv_StartColumn);
    GetElementIdName(pObjList,szIdName);
    pTemp=strstr(szIdName,"\1");
    if(pTemp)
        *pTemp='_';    //由于PopupType在szIdName里面使用了'\1'字符作为名字间的分隔,写入变量定义前需要还原
    fprintf(gv_pfOutput_C, "{%s, 0, (void*)&%s.%s}, // %s address\n",
            gv_FormObjInfo[PBAFIELD(pObjList, objectType)].pObjIDName,
            szFormName,szIdName,szIdName);
  }
  
  gv_StartColumn -= TAB_SIZE;
  WriteSpace(gv_pfOutput_C, gv_StartColumn);
  fprintf(gv_pfOutput_C, "},\n");
}

char * GetElementIdName(RCFORMOBJLIST *pObjList,char * szIdName)
{
  char * srcIdName=NULL;
  char szTemp[1024];
  switch(PBAFIELD(pObjList,objectType))
  {
  case frmFieldObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.field),szIdName);
    break;
  case frmControlObj:
  case frmGraphicalControlObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.control),szIdName);
    break;
  case frmListObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.list),szIdName);
    break;
  case frmTableObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.table),szIdName);
    break;
  case frmBitmapObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.bitmap),szRscIdName);
    break;
  case frmLabelObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.label),szIdName);
    break;
  case frmTitleObj:
    strcpy(szTemp,"Title");
    srcIdName=szTemp;
    break;
  case frmPopupObj:
    srcIdName=PBAFIELD(pObjList,u.object.popup->szControlIdName);
    strcpy(szTemp,srcIdName);
    strcat(szTemp,"\1");
    srcIdName=PBAFIELD(pObjList,u.object.popup->szListIdName);
    strcat(szTemp,srcIdName);
    srcIdName=szTemp;
    break;
  case frmGadgetObj:
    srcIdName=PBAFIELD(pObjList,u.object.gadget->szIdName);
    break;
  case frmScrollbarObj:
    srcIdName=PBAFIELD(pObjList,u.object.scrollbar->szIdName);
    break;
  case frmSliderObj:
    srcIdName=PBAFIELD(PBAFIELD(pObjList,u.object.slider),szIdName);
    break;
  }
  if(srcIdName)
    strcpy(szIdName,srcIdName);
  else
    strcpy(szIdName,"Known");
  return szIdName;
}

void EndOutputFile_C(void)
{
  fprintf(gv_pfOutput_C, "};\n");
}
/////////////////////////
void InitOutputFile_H(void)
{ char OutFileName_H[_MAX_FNAME];
  char *pTemp;

  strcpy(OutFileName_H, gv_OutFileName_H);
  pTemp = strrchr(OutFileName_H, '.');
  *pTemp = '_';

  fprintf(gv_pfOutput_H, "#ifndef __%s__\n", strupr(OutFileName_H));
  fprintf(gv_pfOutput_H, "#define __%s__\n", strupr(OutFileName_H));
  *pTemp = '.';

  fprintf(gv_pfOutput_H, "\n#include \"eosgui.h\"\n");
  // include def file
  strcpy(OutFileName_H, gv_OutFileName_H);
  pTemp = strrchr(OutFileName_H, '.');
  pTemp-=2;
  strcpy(pTemp, "_def.h");
  fprintf(gv_pfOutput_H, "\n#include \"%s\"\n", OutFileName_H);
}

void BeginOutputFile_H(FRM *pFrm)
{
  WriteDefineInfo(NULL, 0, "%s_ID_%s %d", gv_IDPrefix,PBAFIELD(pFrm, form.szFormIdName), PBAFIELD(pFrm, form.formId));
  
  fprintf(gv_pfOutput_H, "\ntypedef struct _%s_Type\n{\n", szFormName);
         
  WriteSpace(gv_pfOutput_H, TAB_SIZE);
  fprintf(gv_pfOutput_H, "FormType form;\n");
  WriteSpace(gv_pfOutput_H, TAB_SIZE);
  fprintf(gv_pfOutput_H, NAME_FORM_OBJLIST_TYPE";\n", PBAFIELD(pFrm, form.numObjects));
}

void EndOutputFile_H(FRM *pFrm)
{
  fprintf(gv_pfOutput_H, "} %s_Type;\n", szFormName);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -