//=============================================================================
// 目的:
//     編集行の明確化(以前ファイルを保存した時点からの)
//
// 使い方:
//     1. このScriptを所定のフォルダにコピーする。
//     2. 編集行の確認したいファイルをアクティブにする。
//        (thisDocumentで参照出来るように)
//     3. exコマンドで[:run chkmod]を入力。
//     4. Diffが表示されます。
//
// 処理内容:
//     1. アクティブなドキュメントのファイルの内容を
//        一時ファイルにコピー。
//     2. アクティブなドキュメントのビューと
//        一時ファイルでDiffをとる。
//
// 設定:
//     *そのままでも使えますが、Default設定が嫌なら変更して下さい。
//     - c_strTempFileName : Diffの為の一時ファイル名
//
// 注意点:
//     - 実行したファイルを一時ファイルにコピーします。
//       故に、次このScriptを実行するまでは前のファイルの内容が
//       一時ファイルに残されてしまいますのでご注意下さい。
//     - ファイルの内容をコピーする時に1行毎に行っているので
//       巨大なファイルだと遅いかもしれません。
//     - ファイルを保存した場合は、再度実行して下さい。
//     - Diffの設定次第で動作が変わります。
//
//     - テストが適当なので、未だバグがあるかもしれません。
//
//
// 変更履歴:
//     2009-01-21 K27    さくせい。ViVi 2.06.35で動作確認。
//
//=============================================================================
//*****************************************************************************
// Setting
//*****************************************************************************
var c_strTempFileName = //globalSettings.getTextValue("viviScriptDir") +
                        "/chkmod_temp.txt";
//*****************************************************************************
//=============================================================================
//-------------------------------------
// Bool
//-------------------------------------
var True  = 1;
var False = 0;
//-------------------------------------
// Kind Of...
//-------------------------------------
var Kind_String   = 3;
var Kind_Document = 9;
//-------------------------------------
// File
//-------------------------------------
var File_modeRead   = 0x0000;
var File_modeWrite  = 0x0001;
var File_modeCreate = 0x1000;
//=============================================================================
function CopyFile(p_strFrom, p_strTo)
{
    if (!p_strFrom.isKindOf(Kind_String) ||
        !p_strTo.isKindOf(Kind_String)) {
        return False;
    } else if (p_strFrom == "" ||
               p_strTo   == "") {
        return False;
    }

    // Open file
    var fpFrom = stdioFile();
    if (!fpFrom.open(p_strFrom, File_modeRead)) {
        cout << "File open error. file_name="
             << p_strFrom
             << "\n";
        return False;
    }
    var fpTo = stdioFile();
    if (!fpTo.open(p_strTo, File_modeCreate | File_modeWrite)) {
        cout << "File open error. file_name="
             << p_strTo
             << "\n";
        fpFrom.close();
        return False;
    }

    // Copy data
    while (!fpFrom.isEof()) {
        fpTo.writeString(fpFrom.readString());
    }

    // Close file
    fpFrom.close();
    fpTo.close();

    return True;
}

function CheckChanged(p_Doc)
{
    var strTempFileName = c_strTempFileName;

    if (!p_Doc.isKindOf(Kind_Document)) {
        return False;
    }

    // Copy file to temporary
    if (!CopyFile(p_Doc.getPathName(), strTempFileName)) {
        return False;
    }

    // ex command : diff
    var strViCmd = ":diff \"" + strTempFileName + "\"\n";
    p_Doc.getView().viCommand(strViCmd);

    return True;
}

function main()
{
    CheckChanged(thisDocument);
}