// Convert from r_cg_vector_table.c's Reserved_Vector[] to r_cg_vector_pragma.h's R_PRAGMA_INTERRUPT() // // 実行コマンド: // cscript -nologo r_cg_vector_pragma.js {PATH}\r_cg_vector_table.c {PATH}\r_cg_vector_pragma.h // // 各種ドキュメントサイト: // Windowsスクリプトテクノロジ https://msdn.microsoft.com/ja-jp/library/cc392483.aspx // JScriptオブジェクト https://msdn.microsoft.com/ja-jp/library/cc392032.aspx // RegExpオブジェクト https://msdn.microsoft.com/ja-jp/library/cc427721.aspx // JScriptメソッド https://msdn.microsoft.com/ja-jp/library/cc392030.aspx // searchメソッド https://msdn.microsoft.com/ja-jp/library/cc410015.aspx // replaceメソッド https://msdn.microsoft.com/ja-jp/library/cc409988.aspx // 正規表現の構文 https://msdn.microsoft.com/ja-jp/library/cc392020.aspx // FileSystemObject http://msdn.microsoft.com/ja-jp/library/cc428071.aspx // Filesコレクション https://msdn.microsoft.com/ja-jp/library/cc427964.aspx // ADO APIリファレンス https://msdn.microsoft.com/ja-jp/library/cc408215.aspx // ADO Stream https://msdn.microsoft.com/ja-jp/library/cc364272.aspx // ADO 列挙定数 → Windowsフォルダで adojavas.inc または adobvs.inc を検索する var adTypeText = 2; // ADO StreamTypeEnum 列挙定数 var adSaveCreateOverWrite = 2; // ADO SaveOptionsEnum 列挙定数 var adWriteLine = 1; // ADO StreamWriteEnum 列挙定数 var adReadLine = -2; // ADO StreamReadEnum 列挙定数 var adLF = 10; // ADO LineSeparatorEnum 列挙定数 var adCR = 13; // ADO LineSeparatorEnum 列挙定数 var adCRLF = -1; // ADO LineSeparatorEnum 列挙定数 var fso = new ActiveXObject("Scripting.FileSystemObject"); var srcstrm = new ActiveXObject("ADODB.Stream"); var dststrm = new ActiveXObject("ADODB.Stream"); var srcfile = WScript.Arguments(0); var dstfile = WScript.Arguments(1); srcstrm.Type = adTypeText; srcstrm.Charset = "_autodetect_all"; srcstrm.LineSeparator = adCRLF; srcstrm.Open(); srcstrm.LoadFromFile(srcfile); dststrm.Type = adTypeText; dststrm.Charset = "ascii"; dststrm.LineSeparator = adCRLF; dststrm.Open(); // Skip until the line of Reserved_Vector[] while(!srcstrm.EOS) { line = srcstrm.ReadText(adReadLine); if ((index = line.search(/^void \* const Reserved_Vector\[\] __attribute\(\(section\("\.rvectors"\)\)\) =$/)) == 0) { break; } } // Convert from Reserved_Vector[] to R_PRAGMA_INTERRUPT() var number = 0; while(!srcstrm.EOS) { line = srcstrm.ReadText(adReadLine); if (line.search(/^{$/) == 0) { // start continue; } if (line.search(/^}$/) == 0) { // end break; } else if (line.search(/^ *\(void \(\*\)\(void\)\)0xFFFFFFFF,$/) == 0) { // skip } else if (line.search(/^ *undefined_interrupt_source_isr,$/) == 0) { // skip } else if (line.search(/^ *(.*),$/) == 0) { // do dststrm.WriteText("R_PRAGMA_INTERRUPT(" + RegExp.$1 + ", " + number + ")", adWriteLine); } else { // ignore continue; } number++; } srcstrm.Close(); dststrm.SaveToFile(dstfile, adSaveCreateOverWrite); dststrm.Close();