Index > 現在開いているファイルを fm 形式で保存する(Adobe FrameMaker8 FDK Client)
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(&params, FS_AlertUserAboutFailure);
    params.val[i].propVal.u.ival = True;

    i = F_ApiGetPropIndex(&params, FS_SaveMode);
    params.val[i].propVal.u.ival = FV_ModeSaveAs;

    F_ApiSave(docId, docnamefm, &params, &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;
    }
}
 Twitter
follow me on Twitter
 Categories