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

📄 output.c

📁 关于rcp2c_v3.rar协议在LINUX下的实现程序
💻 C
📖 第 1 页 / 共 4 页
字号:
  gv_FormCount++;
}
/////////////////////////
void InitOutputFile_DEF(void)
{ char OutFileName_DEF[_MAX_FNAME];
  char *pTemp;

  strcpy(OutFileName_DEF, gv_OutFileName_H);
  pTemp = strrchr(OutFileName_DEF, '.');
  pTemp-=2;
  strcpy(pTemp, "_def_h");

  fprintf(gv_pfOutput_DEF, "#ifndef __%s__\n", strupr(OutFileName_DEF));
  fprintf(gv_pfOutput_DEF, "#define __%s__\n", strupr(OutFileName_DEF));
}

void WriteDefineInfo(FILE *pfnOutput, int StartColumn, const char *pFormat, ...)
{ va_list(arglist);

  va_start(arglist, pFormat);

  if (!pfnOutput)
  {
    pfnOutput = gv_pfOutput_DEF;
    fprintf(pfnOutput, "\n#define ");
  }
  else
  {
    WriteSpace(pfnOutput, StartColumn);
  }
  vfprintf(pfnOutput, pFormat, arglist);
  fprintf(pfnOutput, "\n");
}
/////////////////////////
void WriteSpace(FILE *pfDest, int SpaceCount)
{ char OutputFormat[] = "%%%ds";
  
  sprintf(OutputFormat, OutputFormat, SpaceCount);
  fprintf(pfDest, OutputFormat, "");
}

char szMenuName[1024];
void BeginOutputMenu()
{
  int StartColumn=gv_StartColumn;
  sprintf(szMenuName,"%s_%s",gv_IDPrefix,szMenuIdName);

  //save Menu define info for resource
  sprintf(szDefineInfoBuf,"{kMenuRscType,%s_ID_%s,(void*)&%s,sizeof(%s)},",gv_IDPrefix,
    szMenuIdName,szMenuName,szMenuName);
  if(nMenuDefineInfoCount==MAX_OBJECT)
  {
      char lpBuf[1024];
      sprintf(lpBuf,"Error: %s: Exceed Menu number limit,max number is %d.",
          szMenuIdName,MAX_OBJECT);
      Error(lpBuf);
      return;
  }
  pMenuDefineInfo[nMenuDefineInfoCount]=strdup(szDefineInfoBuf);
  nMenuDefineInfoCount++;

  //xxx_h.h
  fprintf(gv_pfOutput_H, "\n//MenuBar define\n");
  fprintf(gv_pfOutput_H, "typedef struct _%s_Type \n{\n",szMenuName);
  WriteSpace(gv_pfOutput_H,StartColumn);
  fprintf(gv_pfOutput_H, "MenuBarType menubar;\n");
  //xxx_c.h
  fprintf(gv_pfOutput_C, "\nconst %s_Type %s=\n{\n",szMenuName,szMenuName);

  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{ //MenuBarType menubar;\n");
  StartColumn+=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"NULL,  //WinHandle	barWin\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"NULL,  //WinHandle	bitsBehind\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"NULL,  //WinHandle	savedActiveWin\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"NULL,  //WinHandle	bitsBehindStatus\n");

  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"{ //MenuBarAttrType 	attr\n");
  StartColumn+=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(BAFIELD(menu, attr.visible))
    fprintf(gv_pfOutput_C,"1,  //UInt16 visible\n");
  else
    fprintf(gv_pfOutput_C,"0,  //UInt16 visible\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"0,  //UInt16 commandPending\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"0,  //UInt16 insPtEnabled\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"1,  //UInt16 needsRecalc\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"0,  //UInt16 attnIndicatorIsAllowed\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"0,  //UInt16 reserved\n");
  StartColumn-=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"},\n");

  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"-1,  //Int16		curMenu\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"-1,  //Int16		curItem\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"0,  //Int32	  commandTick\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"%d,  //Int16		numMenus\n",BAFIELD(menu, numMenus));
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C,"(void*)%s.menus,  //MenuPullDownPtr  menus\n",szMenuName);

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

  //xxx_def.h
  WriteDefineInfo(NULL,0,"%s_ID_%s %d",gv_IDPrefix,szMenuIdName,idMenu);
}

void OutputPullMenu2CFile(int nPullMenuIndex,int StartColumn)
{
  RCMENUPULLDOWN mpd = rgmpd[nPullMenuIndex];
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{ //MenuPullDownType menus[%d];\n",nPullMenuIndex);
  StartColumn+=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "NULL,  //WinHandle	menuWin\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{%d,%d,%d,%d},  //RectangleType	bounds\n",
    BAFIELD(mpd,bounds.topLeft.x),BAFIELD(mpd,bounds.topLeft.y),
    BAFIELD(mpd,bounds.extent.x),BAFIELD(mpd,bounds.extent.y));
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "NULL,  //WinHandle	bitsBehind\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{%d,%d,%d,%d},  //RectangleType	bounds\n",
    BAFIELD(mpd,titleBounds.topLeft.x),BAFIELD(mpd,titleBounds.topLeft.y),
    BAFIELD(mpd,titleBounds.extent.x),BAFIELD(mpd,titleBounds.extent.y));
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "(void*)%s.Title%d,  //Char Title%d\n",szMenuName,nPullMenuIndex,nPullMenuIndex);
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(BAFIELD(mpd,hidden)==1)
    fprintf(gv_pfOutput_C, "1,  //UInt16	hidden\n");
  else
    fprintf(gv_pfOutput_C, "0,  //UInt16	hidden\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "0,  //UInt16  needFree\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "0,  //UInt16  numFreeItems\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "%d,  //UInt16	numItems\n",BAFIELD(mpd,numItems));
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "(void*)%s.Title_%d_Items,  //MenuItemType *	items\n",szMenuName,nPullMenuIndex);
  StartColumn-=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "},\n");
}

void OutPutMenuItem2CFile(int nPullMenuIndex,int nMenuItenIndex,int nItemIndexAll,int StartColumn)
{
  RCMENUITEM mi;
  mi = rgmi[nItemIndexAll];
 //xxx_def.h
  if(mi.szIdName)
    WriteDefineInfo(NULL,0,"%s_ID_%s_%s %d",gv_IDPrefix,szMenuIdName,mi.szIdName,mi.id);

  //xxx_c.h
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{ //MenuItemType Title_%d_Items[%d]\n",nPullMenuIndex,nMenuItenIndex);
  StartColumn+=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(mi.szIdName)
    fprintf(gv_pfOutput_C, "%s_ID_%s_%s,  //UInt16	id\n",gv_IDPrefix,szMenuIdName,mi.szIdName);
  else
    fprintf(gv_pfOutput_C, "%d,  //UInt16	id\n",mi.id);
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(mi.command)
    fprintf(gv_pfOutput_C, "'%c',  //Char	command\n",mi.command);
  else
    fprintf(gv_pfOutput_C, "' ',  //Char	command\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(mi.hidden)
    fprintf(gv_pfOutput_C, "1,  //UInt8	hidden\n");
  else
    fprintf(gv_pfOutput_C, "0,  //UInt8	hidden\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "0,  //UInt8  needFree\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "0,  //UInt8 reserved\n");
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "(void*)%s.Title_%d_Item_str_%d,  //Char *itemStr\n",
    szMenuName,nPullMenuIndex,nMenuItenIndex);
  StartColumn-=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "},\n");
}

void DumpMenuToCFile()
{
  int i,j;
  int nItems;
  int nPullMenuCount;
  int StartColumn=gv_StartColumn;
  BeginOutputMenu();
  nPullMenuCount=BAFIELD(menu, numMenus);
  //xxx_h.h
  WriteSpace(gv_pfOutput_H,StartColumn);
  fprintf(gv_pfOutput_H, "MenuPullDownType menus[%d];\n",nPullMenuCount);
  //xxx_c.h
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{ //MenuPullDownType menus[%d];\n",nPullMenuCount);
  StartColumn+=gv_StartColumn;
  for(i=0;i<nPullMenuCount;i++)
    OutputPullMenu2CFile(i,StartColumn);
  StartColumn-=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  for(i=0;i<nPullMenuCount;i++)
  {
    char *szTitle;
    int nTitleLen;
    RCMENUPULLDOWN mpd = rgmpd[i];
    szTitle=BAFIELD(mpd,title);
    nTitleLen=strlen(szTitle);
    //xxx_h.h
    WriteSpace(gv_pfOutput_H,StartColumn);
    fprintf(gv_pfOutput_H, "Char Title%d[%d+1];\n",i,nTitleLen);
    //xxx_c.h
    WriteSpace(gv_pfOutput_C,StartColumn);
    fprintf(gv_pfOutput_C, "// Char Title%d[%d+1]\n",i,nTitleLen);
    WriteSpace(gv_pfOutput_C,StartColumn);
    fprintf(gv_pfOutput_C, "\"%s\",\n",szTitle);
  }
  nItems=0;
  for(i=0;i<nPullMenuCount;i++)
  {
    RCMENUPULLDOWN mpd = rgmpd[i];
    //xxx_h.h
    WriteSpace(gv_pfOutput_H,StartColumn);
    fprintf(gv_pfOutput_H, "MenuItemType Title_%d_Items[%d];\n",i,BAFIELD(mpd,numItems));
    //xxx_c.h
    WriteSpace(gv_pfOutput_C,StartColumn);
    fprintf(gv_pfOutput_C, "{ //MenuItemType Title_%d_Items[%d]\n",i,BAFIELD(mpd,numItems));

    StartColumn+=gv_StartColumn;
    for(j=0;j<BAFIELD(mpd,numItems);j++)
      OutPutMenuItem2CFile(i,j,nItems++,StartColumn);
    StartColumn-=gv_StartColumn;
    WriteSpace(gv_pfOutput_C,StartColumn);
    fprintf(gv_pfOutput_C, "},\n");
    nItems-=BAFIELD(mpd,numItems);
    for(j=0;j<BAFIELD(mpd,numItems);j++)
    {
      RCMENUITEM mi;
      char *szTitle;
      int nTitleLen;
      mi = rgmi[nItems++];
      szTitle=mi.itemStr;
      nTitleLen=strlen(szTitle);
      //xxx_h.h
      WriteSpace(gv_pfOutput_H,StartColumn);
      fprintf(gv_pfOutput_H, "Char Title_%d_Item_str_%d[%d+1];\n",i,j,nTitleLen);
      //xxx_c.h
      WriteSpace(gv_pfOutput_C,StartColumn);
      fprintf(gv_pfOutput_C, "// Char Title_%d_Item_str_%d[%d+1]\n",i,j,nTitleLen);
      WriteSpace(gv_pfOutput_C,StartColumn);
      fprintf(gv_pfOutput_C, "\"%s\",\n",szTitle);
    }
  }
  //xxx_h.h
  fprintf(gv_pfOutput_H, "} %s_Type;\n",szMenuName);
  //xxx_c.h
  fprintf(gv_pfOutput_C, "};\n");
}

void DumpAlert2DefFile(AlertInfoType * pAlertInfo)
{
  char szAlertName[1024];
  char szTemp[1024];
  char *pszSrc,*pszDst;
  int StartColumn;
  int i;
  sprintf(szAlertName,"%s_%s",gv_IDPrefix,pAlertInfo->szAlertIdName);

  //save Alert define info for resource
  sprintf(szDefineInfoBuf,"{kAlertRscType,%s_ID_%s,(void*)&%s,sizeof(%s)},",gv_IDPrefix,
    pAlertInfo->szAlertIdName,szAlertName,szAlertName);
  if(nAlertDefineInfoCount==MAX_OBJECT)
  {
      sprintf(szTemp,"Error: %s: Exceed Alert number limit,max number is %d.",
          pAlertInfo->szAlertIdName,MAX_OBJECT);
      Error(szTemp);
      return;
  }
  pAlertDefineInfo[nAlertDefineInfoCount]=strdup(szDefineInfoBuf);
  nAlertDefineInfoCount++;

  //xxx_def.h
  WriteDefineInfo(NULL,0,"%s_ID_%s %d",gv_IDPrefix,pAlertInfo->szAlertIdName,pAlertInfo->id);

  //xxx_h.h
  fprintf(gv_pfOutput_H, "\n//Alert define");
  fprintf(gv_pfOutput_H, "\n#define %s_STRING    ",szAlertName);
  StartColumn=strlen("#define     _STRING")+strlen(szAlertName);
  fprintf(gv_pfOutput_H, "\"%s\\0\"      \\\n",pAlertInfo->szTitle);
  WriteSpace(gv_pfOutput_H,StartColumn);
  pszDst=szTemp;
  pszSrc=pAlertInfo->szMessage;
  for(i=0;i<(int)strlen(pAlertInfo->szMessage);i++)
  {
     if(*pszSrc=='\n')
     {
         *pszDst++='\\';
         *pszDst++='n';
         pszSrc++;
     }
     else
         *pszDst++=*pszSrc++;

  }
  *pszDst='\0';
  fprintf(gv_pfOutput_H, "\"%s\\0\"      \\\n",szTemp);
  for(i=0;i<pAlertInfo->nBtnCount;i++)
  {
    WriteSpace(gv_pfOutput_H,StartColumn);
    if(i!=pAlertInfo->nBtnCount-1)
      fprintf(gv_pfOutput_H, "\"%s\\0\"      \\\n",pAlertInfo->szBtnText);
    else
      fprintf(gv_pfOutput_H, "\"%s\"      \n",pAlertInfo->szBtnText);
    pAlertInfo->szBtnText+=strlen(pAlertInfo->szBtnText)+1;
  }
  StartColumn=gv_StartColumn;
  fprintf(gv_pfOutput_H, "\ntypedef struct _%s_Type \n{\n",szAlertName);
  WriteSpace(gv_pfOutput_H,StartColumn);
  fprintf(gv_pfOutput_H, "AlertTemplateType	alertTMP;\n");
  WriteSpace(gv_pfOutput_H,StartColumn);
	fprintf(gv_pfOutput_H, "Char altstr[sizeof(%s_STRING)];\n",szAlertName);;
  fprintf(gv_pfOutput_H, "} %s_Type;\n",szAlertName);

  //xxx_c.h
  StartColumn=gv_StartColumn;
  fprintf(gv_pfOutput_C, "\n//Alert define");
  StartColumn=gv_StartColumn;
  fprintf(gv_pfOutput_C, "\nconst %s_Type   %s=\n{\n",szAlertName,szAlertName);
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "{ //AlertTemplateType\n");
  StartColumn+=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "%d,	//alertTypes {informationAlert:0 ,confirmationAlert:1 "
                         ",warningAlert:2 ,errorAlert:3 }\n",pAlertInfo->alertType);
  WriteSpace(gv_pfOutput_C,StartColumn);
  if(pAlertInfo->szHelpRscIdName==NULL)
    fprintf(gv_pfOutput_C, "%d, //helpRscID\n",pAlertInfo->helpRscId);
  else
    fprintf(gv_pfOutput_C, "%s, //helpRscID\n",pAlertInfo->szHelpRscIdName);
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "%d, //numButtons\n",pAlertInfo->nBtnCount);
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "%d, //defaultButton\n",pAlertInfo->nDefaultBtn);
  StartColumn-=gv_StartColumn;
  WriteSpace(gv_pfOutput_C,StartColumn);
  fprintf(gv_pfOutput_C, "},\n");

  WriteSpace(gv_pfOutput_C,StartColumn);
	fprintf(gv_pfOutput_C, "%s_STRING, //Char altstr[sizeof(%s_STRING)];\n",szAlertName,szAlertName);;
  fprintf(gv_pfOutput_C, "};\n",szAlertName);
}

static void WriteResourceDefine2CFile()
{
  int i;
  int StartColumn;
  StartColumn=gv_StartColumn;
  //Form Resource Define
  fprintf(gv_pfOutput_C, "\n//Form Resource define\n");
  if(nFormDefineInfoCount==0)

⌨️ 快捷键说明

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