📄 output.c
字号:
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 + -