Thu, July 2, 2009
現在開いているファイルを fm 形式で保存する(Adobe FrameMaker8 FDK Client)
先ほどの続きで、いったん mif 形式で保存して処理をした後、 再度 fm 形式で保存するときに使うことを想定したFDKクライアントです。
ただやっている内容は、現在開いてるファイルを全部取得して、パラメータとして、 FV_ModeSaveAs を指定して fm 拡張子で保存しているだけです。
tofm.c
#include "fapi.h"
#include "futils.h"
#include "fstrings.h"
#include "fstrlist.h"
#define SaveAsFm 2
StringT FM_SUFFIX = ".fm";
VoidT F_ApiInitialize(IntT initialization) {
F_ObjHandleT menuBarId2, menuId2;
menuBarId2 = F_ApiGetNamedObject(FV_SessionId,FO_Menu,"!MakerMainMenu");
menuId2 = F_ApiDefineAndAddMenu(menuBarId2,"APIMenu2","API");
F_ApiDefineAndAddCommand(SaveAsFm, menuId2,"SaveAsFmCmd", "Save all opened mif files as fm", "");
}
StringT ConvMifToFm(const StringT docname,StringT docnamefm){
IntT len;
len=F_StrLen(docname);
//F_Printf(NULL,(StringT)"CHK2 len= %d",len );
F_StrCpyN(docnamefm,docname,len-3);
F_StrCat(docnamefm,FM_SUFFIX);
F_Printf(NULL,(StringT)"CHK3 MIF= %s",docnamefm );
return docnamefm;
}
VoidT DoSave(const F_ObjHandleT docId,const StringT docnamefm){
IntT i;
UCharT msg[1024];
F_PropValsT params, *returnParamsp = NULL;
params = F_ApiGetSaveDefaultParams();
i = F_ApiGetPropIndex(¶ms, FS_AlertUserAboutFailure);
params.val[i].propVal.u.ival = True;
i = F_ApiGetPropIndex(¶ms, FS_SaveMode);
params.val[i].propVal.u.ival = FV_ModeSaveAs;
F_ApiSave(docId, docnamefm, ¶ms, &returnParamsp);
// display confirm dialog.
i = F_ApiGetPropIndex(returnParamsp, FS_SavedFileName);
F_Sprintf(msg, "Saved: %s",returnParamsp->val[i].propVal.u.sval);
F_ApiAlert(msg, FF_ALERT_CONTINUE_NOTE);
}
VoidT DoSaveAllAsFm(){
//F_ObjHandleT docId,fmDocId;
F_ObjHandleT docId;
StringT docname;
StringT docnamefm = F_StrNew((IntT)256);
//docId = F_ApiGetId(0,FV_SessionId,FP_ActiveDoc);
docId = F_ApiGetId(0, FV_SessionId, FP_FirstOpenDoc);
if(!docId){
return ;
}
while (docId){
docname = F_ApiGetString(docId, docId, FP_Name);
F_Printf(NULL,(StringT)"CHK MIF= %s",docname );
ConvMifToFm(docname,docnamefm);
DoSave(docId,docnamefm);
docId = F_ApiGetId(FV_SessionId, docId,FP_NextOpenDocInSession);
}
F_Free(docnamefm);
}
VoidT F_ApiCommand(IntT command) {
switch (command) {
case SaveAsFm:
DoSaveAllAsFm();
break;
}
}