<job>
<script language="VBScript">
function vbInputBox(msg, title, def)
	vbInputBox=InputBox(msg, title, def)
end function
</script>
<script language="JavaScript">
// ̓dqIS[ MyMelo2
// https://koyama.verse.jp/elecraft/mymelo
// 20050307-20240313 koyama88@cameo.plala.or.jp
// ()
// (1) y͂ăIWi̓dqIS[邱Ƃł܂B
// (2) PłȂA2a3aȂǔtt̓dqIS[܂B
// (3) PȃuU[ł͂ȂAsAm̉ɎꂢȉFł(F3)B
// (4) ̋Ȃo^A{^ōĐȂIł܂B
// (5) ArduinoUNO/NANO, Digispark, ATtiny85, ATtiny2313(A)/4313, ATmega328P Ȃǂœ삵܂B
//
// (yf[^̍쐬)
// (1) ueLXgyTNv(܂̓Ȃǂ̃eLXgGfB^)Łuhh\\\[v̂悤Ɋyt@C(ZZ.mml)쐬܂({R[h̓VtgJIS)B
//		g鉹RA1_`SI8REST(x)87ő31ނłB
//		g鉹L1_(t_S)`L32(32)11ő8ނłB
// (2) ͂߂ mymelo2.wsf _uNbNĊyf[^܂B̍ہA_CAO{bNX̂ŁA`gAgAg(t͎Opg)̂ꂩI܂Byf[^t@C(mymelo2tH_mymelo2.h)܂B
// (3) yt@C(ZZ.mml) mymelo2.wsf ɃhbOhbvƁAyf[^t@CɊyf[^L^܂B
// (4) (3)̑JԂƁAyf[^t@Cɕ̊yo^ł܂B
// (5) yύXꍇ́A(2)̏蒼܂B
//
// (vȌ)
// (1) ArduinoIDENAmymelo2tH_ mymelo2.ino Jď݂܂B
//
// ()
// (1) d𓊓ƁAIS[̉Đ܂BOXCb`ȂƁAXCb`ƂɍĐ܂BXCb`𒷉2Ȗڈȍ~Đł܂B

var ws=WScript.CreateObject("WScript.Shell");
var sh =new ActiveXObject("Shell.Application");
var ado=new ActiveXObject("ADODB.Stream");
var fso=new ActiveXObject("Scripting.FileSystemObject");
var folder=fso.GetFile(WScript.ScriptFullName).ParentFolder;
var waveform=0;	// 0:`g 1:g 2:g(t͎Opg)
if(WScript.Arguments.length==0){			// _uNbNŋN
	var	mymelo_h=fso.CreateTextFile(folder+"/mymelo2/mymelo2.h",true);
	var btn=ws.Popup("f[^܂Bg`? \n@͂(Y): `g\n@(N): g\n@LZ: g(t͎Opg)",0,"F̑I",3);
	if(btn==6)			waveform=0;			// ͂(Y)Ȃ猸`g
	else if(btn==7)	waveform=1;			// (N)Ȃ猸g
	else if(btn==2)	waveform=2;			// LZȂ猸g(t͎Opg)
// mymelo_h -----------------------------------------------
	var s="// This file contains melody data created by mymelo2.wsf\n\n"
	s+="#define MYMELO\n";
	if(waveform==0)				s+="#define WAVEFORM 0	// `g\n";
	else if(waveform==1)	s+="#define WAVEFORM 1	// g\n";
	else if(waveform==2)	s+="#define WAVEFORM 2	// g(t͎Opg)\n";
	s+="#define NMELO 0		// number of melody\n";
	s+="#define NTRACK 1	// number of track(1..3)\n\n";
	s+="const uint16_t tempo[]={};\n\n";	// 20240313 uint16_t
	s+="const uint8_t* const pLen[] PROGMEM={};	// pointer to score length array of each melody\n\n";
	if(waveform==0)	s+="const uint16_t* const pCnt[] PROGMEM={};// pointer to count array of each melody\n\n";
	else						s+="const uint16_t* const pSW[] PROGMEM={};	// pointer to step width array of each melody\n\n";
	s+="const uint8_t* const pPart1[] PROGMEM={};	// pointer to part1 data of each melody\n";
	s+="const uint8_t* const pPart2[] PROGMEM={};	// pointer to part2 data of each melody\n";
	s+="const uint8_t* const pPart3[] PROGMEM={};	// pointer to part3 data of each melody\n";
	mymelo_h.Write(s);
	mymelo_h.Close();
	WScript.Echo("f[^܂B\nmmlt@ChbOhbvĂB");	WScript.Quit();
}
var filename=WScript.Arguments(0).toLowerCase();
if(!filename.match(/\.mml$/) && !filename.match(/\.txt$/)){	// txtt@CłOK
	WScript.Echo("mmlt@ChbOhbvĂ");	WScript.Quit();
}

var sMelo=readFile(folder+"/mymelo2/mymelo2.h").replace(/\r\n/g,"\n");
waveform=parseInt(sMelo.match(/#define\sWAVEFORM\s(\d+)/)[1]);	// 0, 1, 2
var nMelo=parseInt(sMelo.match(/#define\sNMELO\s(\d+)/)[1]);		// ݂̋Ȑ
var nTrack=parseInt(sMelo.match(/#define\sNTRACK\s(\d+)/)[1]);	// gbN(ő)
var tempo=sMelo.match(/const uint16_t tempo\[\]=\{(.*)\};/)[1];	// eȂ̃e|(z)	20240313 uint16_t
tempo=(tempo==""?[]:tempo.split(","));	// : "".split(",")  [] ł͂Ȃ [""]

// mmlt@Cmymelo2.h쐬 -----------------------------------------------
var Ts=0.000032, Nc=256;				// (g, Opg) TvO^C, g`Tv
var Onpu={	"L32":1,"L16":2,"L16_":3,	// 11̒1Ȃōő8ޗpł
	"L8":4,"L8_":6,"L4":8,"L4_":12,"L2":16,"L2_":24,"L1":32,"L1_":48};
var Doremi={"r":"REST", "a":"RA", "b":"SI", "c":"DO", "d":"RE", "e":"MI", "f":"FA", "g":"SO"};
var Note=[											// 87̒1Ȃōő31ޗpł
	"REST", "RA1_", "SI1", "DO2", "DO2_", "RE2", "RE2_","MI2", "FA2", "FA2_", "SO2", "SO2_",
	"RA2", "RA2_", "SI2", "DO3", "DO3_", "RE3", "RE3_", "MI3", "FA3", "FA3_", "SO3", "SO3_",
	"RA3", "RA3_", "SI3", "DO4", "DO4_", "RE4", "RE4_", "MI4", "FA4", "FA4_", "SO4", "SO4_",
	"RA4", "RA4_", "SI4", "DO5", "DO5_", "RE5", "RE5_", "MI5", "FA5", "FA5_", "SO5", "SO5_",
	"RA5", "RA5_", "SI5", "DO6", "DO6_", "RE6", "RE6_", "MI6", "FA6", "FA6_", "SO6", "SO6_",
	"RA6", "RA6_", "SI6", "DO7", "DO7_", "RE7", "RE7_", "MI7", "FA7", "FA7_", "SO7", "SO7_",
	"RA7", "RA7_", "SI7", "DO8", "DO8_", "RE8", "RE8_", "MI8", "FA8", "FA8_", "SO8", "SO8_",
	"RA8", "RA8_", "SI8"];
var Count={"REST":0};						// `g
var sw={"REST":0};							// g, Opg
var mymelo=fso.GetFile(WScript.ScriptFullName).ParentFolder;
var sPart=[,"","",""];
var mml=readFile(filename);
var Key=0;
if(mml.match(/Key\([+-]?\d+\)/)){	// 20230703 Key(-3)Łu-3Pʁvڒ
	Key=parseInt(mml.match(/Key\(([+-]?\d+)\)/)[1]);	// Ăŏ1L
}
for(var i=1;i<Note.length;i++){	// e[u
	Count[Note[i]]=Math.round(8000000/(110*Math.pow(2,(i+Key)/12)));	// `g
	sw[Note[i]]=Math.round(Ts*Nc*256*(110*Math.pow(2,(i+Key)/12)));		// g, Opg
}
mml=mml.replace(/\/\*[^\*]*\*\//g,"")	// Rg폜
	.replace(/@/g," ")
	.replace(//g,"").replace(/S/g,"1")
	.replace(/y/g,"[").replace(/z/g,"]").replace(/F/g,":")
	.replace(/[I-`]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0xFEE0);})//pL͔p
	.replace(/Z/g,"0").replace(//g,"1").replace(//g,"2").replace(/O/g,"3")
	.replace(/l/g,"4").replace(//g,"5").replace(/Z/g,"6").replace(//g,"7")
	.replace(//g,"8").replace(//g,"9")
	.replace(/[-]/g,function(s){return String.fromCharCode(s.charCodeAt(0)+0x0060);})//Ȃ̓Ji
	.replace(/\[([^\[:\]]*):([^\[:\]]*)\]/g,"$1$2\n$1")						// r܂ŌJԂ
	.replace(/\[8([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1\n$1\n$1")	// 8JԂ
	.replace(/\[7([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1\n$1")			// 7JԂ
	.replace(/\[6([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1")					// 6JԂ
	.replace(/\[5([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1")							// 5JԂ
	.replace(/\[4([^\[\]]*)\]/g,"$1\n$1\n$1\n$1")									// 4JԂ
	.replace(/\[3([^\[\]]*)\]/g,"$1\n$1\n$1")											// 3JԂ
	.replace(/\[2?([^\[\]]*)\]/g,"$1\n$1")												// 2JԂ
	.replace(/\[8([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1\n$1\n$1")	// 8JԂ
	.replace(/\[7([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1\n$1")			// 7JԂ
	.replace(/\[6([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1\n$1")					// 6JԂ
	.replace(/\[5([^\[\]]*)\]/g,"$1\n$1\n$1\n$1\n$1")							// 5JԂ
	.replace(/\[4([^\[\]]*)\]/g,"$1\n$1\n$1\n$1")									// 4JԂ
	.replace(/\[3([^\[\]]*)\]/g,"$1\n$1\n$1")											// 3JԂ
	.replace(/\[2?([^\[\]]*)\]/g,"$1\n$1")												// 2JԂ
	.replace(//g,"l").replace(/(l\d+)/g,"\n$1\n")			// l2,l4,l8,l16,l32Ɨs
	.replace(/\r\n/g,"\n")			// sR[h𐮗
	.replace(/&\n/g,"&")				// s&Ύsƍ
	.split(/\n+/);							// sŕ

for(var i=0;i<mml.length;i++){	// sƂ
	mml[i]=mml[i]
	.replace(/Key(.*)/,"")			// ڒ͏
	.replace(/\s*\/\/.*$/,"")		// s̃Rg폜
	.replace(/#/g,"System.KeyFlag+=").replace(//g,"System.KeyFlag-=")
	.replace(/[#]/g,"+").replace(//g,"-")
	.replace(/K/g,"o")
	.replace(//g,"Time")
	.replace(/tʒu/g,"PlayForm")
	.replace(/F/g,"@")
//	.replace(//g,"v").replace(/v\(?\d*\)?;?/g,"")								// 폜
	.replace(/A/g,"Div")
	.replace(/y_/g,"y64,127;").replace(//g,"y64,0;").replace(/y\d*,\d*;*/g,"")
	.replace(//g,"Decresc=").replace(/fNbVFh/g,"Decresc=")
	.replace(/Decresc=\d*,\d*,\d*/g,"").replace(/Decresc=\d*,\d*/g,"")// 폜
	.replace(/傫/g,"Cresc=").replace(/NbVFh/g,"Cresc=")	// 폜
	.replace(/Cresc=[0-9+]*,[0-9+]*,\d*/g,"").replace(/Cresc=[0-9+]*,[0-9+]*/g,"")
	.replace(/Ȗ{.*}/g,"").replace(/{.*}/g,"")									// 폜
	.replace(/Rg{.*}/g,"").replace(//g,"")						// 폜
	.replace(/\*/g,"")																								// *͐Ή
	.replace(/q/g,"System.TimeSignature=")

	.replace(/e|\(?\d*\)?/g,"")
	.replace(/e|/g,"Tempo=")
	.replace(/[啛]?.*p[g/g,"Track=")
	.replace(/gbN/g,"Track=")
	.replace(/Q[g/g,"q").replace(/q\d*/g,"")												// 폜

	.replace(/h/g,"c").replace(//g,"d").replace(/~/g,"e").replace(/t@/g,"f")
	.replace(/\/g,"g").replace(//g,"a").replace(/V/g,"b").replace(/[b]/g,"r")
	.replace(/[/g,"^").replace(/[uv]/g,"\'").replace(/[な]/g,">").replace(/[]/g,"<")
	.replace(/(\^)(\d+)/g,"$1r$2")										// b1^8  b1^r8
	.replace(/([a-g][+\-]?)/g,"`$1").replace(/([a-g][+\-]?)/g,"\"$1")
	.replace(/System\.MeasureShift\(.*\);/g,"")
	.replace(/System\.TimeSignature=.*$/g,"")
	.replace(/ResetGM;*/g,"")			.replace(/Time\(\d*\);*/g,"")
	.replace(/T\(\d*\);*/g,"")		.replace(/N\(\d*\);*/g,"")
	.replace(/TrackSync;*/g,"")		.replace(/v\.T\(\d*\);*/g,"")
	.replace(/t\.N\(\d*\);*/g,"")	.replace(/REV\(\d*\)/g,"")
	.replace(/M\(\d*\)/g,"")			.replace(/Str.*=\{.*\}/g,"")
	.replace(/ *A */g,"")	.replace(/Sub{.*}/g,"")	.replace(/ +/g,"");
}

var loop=0;
var NoteList={"REST":1}, iNote=2;						// iNote0`31(0͏I, 1͋x)
var Tempo=120;
var Cnt="";					// `g JEg
var SW="";					// g g`e[uStepWidth
var OnpuList=[],		 iOnpu=0;								// iOnpu0`7
//var Larray="uint8_t len[]={";
//var gakufu="const char part1[] PROGMEM={\n\t";	// 2016.8.17 C
var Len="";
var track=1, l=4, o=4;										// ftHg̓gbN1, l, K4
var ukeys="", dkeys="";										// ftHg͒#, Ȃ
for(var i=0;i<mml.length;i++){						// sƂ
	if(mml[i].match(/System\.KeyFlag\+=/)){	// System.KeyFlag+=(afg) 	a+,f+,g+
		ukeys=mml[i].replace(/System\.KeyFlag\+=\((.*)\)/,"$1");	// ukeys="afg"
	}else if(mml[i].match(/System\.KeyFlag\-=/)){				// System.KeyFlag-=(ag) 	a-,g- 2017.2.9 C
		dkeys=mml[i].replace(/System\.KeyFlag\-=\((.*)\)/,"$1");	// dkeys="ag"
	}else if(mml[i].match(/Track=1/)){
	}else if(mml[i].match(/Track=/)){				// gbN2`3
		track++;	l=4;	o=4;									// ftHg͎lŉK4
	}else if(mml[i].match(/Tempo=?\(?\d*\)?/)){	// Tempo120: L4(8)500ms
		Tempo=mml[i].replace(/Tempo=?\(?(\d*)\)?/,"$1");
	}else if(mml[i].match(/^l\d/)){						// `
		l=mml[i].replace(/l/,"")*1;
	}else if(mml[i].match(/^\s*[ǎ啛]/)){
	}else if(mml[i].match(/TrackName\s*=/)){
	}else if(mml[i].match(/Copyright\s*=/)){
	}else if(mml[i].match(/Meta.*\s*=/)){
	}else if(mml[i].match(/@\(.*\)/)){
	}else if(mml[i].match(/Time\(.*\)/)){
	}else if(mml[i].match(/PlayForm\(.*\)/)){
	}else{

	mml[i]=mml[i].replace(/\s*\^/g,"^")																											// 20240305 C
	.replace(/'([^']*)([a-g]\+?)([^']*)([a-g]\+?)([^']*)\'/g,"$1$2$3$5")										// 2a͐擪̂ݗL
	.replace(/'([^']*)([a-g]\+?)([^']*)([a-g]\+?)([^']*)([a-g]\+?)([^']*)'/g,"$1$2$3$5$7")	// 3a͐擪̂ݗL
	.replace(/<>/g,"").replace(/<>/g,"").replace(/></g,"").replace(/></g,"");								// KύXE
	if(l==2){
		mml[i]=mml[i].replace(/([a-gr][+\-]?)2?\^/g,"$11");
	}else if(l==4){
		mml[i]=mml[i].replace(/([a-gr][+\-]?)4?\^\^\^\^\^/g,"$11\.")
		.replace(/([a-gr][+\-]?)4?\^\^\^/g,"$11")
		.replace(/([a-gr][+\-]?)4?\^\^/g,"$12\.")	.replace(/([a-gr][+\-]?)4?\^/g,"$12");
	}else if(l==8){
		mml[i]=mml[i].replace(/([a-gr][+\-]?)8?\^\^\^\^\^\^\^/g,"$11")
		.replace(/([a-gr][+\-]?)8?\^\^\^\^\^/g,"$12\.")
		.replace(/([a-gr][+\-]?)8?\^\^\^/g,"$12")
		.replace(/([a-gr][+\-]?)8?\^\^/g,"$14\.")	.replace(/([a-gr][+\-]?)8?\^/g,"$14");
	}else if(l==16){
		mml[i]=mml[i].replace(/([a-gr][+\-]?)\^\^\^\^\^\^\^/g,"$12")
		.replace(/([a-gr][+\-]?)\^\^\^\^\^/g,"$14\.")
		.replace(/([a-gr][+\-]?)\^\^\^/g,"$14")
		.replace(/([a-gr][+\-]?)\^\^/g,"$18\.")		.replace(/([a-gr][+\-]?)\^/g,"$18");
	}else if(l==32){
		mml[i]=mml[i].replace(/([a-gr][+\-]?)\^\^\^\^\^\^\^/g,"$14")
		.replace(/([a-gr][+\-]?)\^\^\^\^\^/g,"$18\.")
		.replace(/([a-gr][+\-]?)\^\^\^/g,"$18")
		.replace(/([a-gr][+\-]?)\^\^/g,"$116\.")	.replace(/([a-gr][+\-]?)\^/g,"$116");
	}
	mml[i]=mml[i].replace(/([a-gr][+\-]?)32\^\^\^\^\^\^\^/g,"$14")
	.replace(/([a-gr][+\-]?)32\^\^\^\^\^/g,"$18\.")
	.replace(/([a-gr][+\-]?)32\^\^\^/g,"$18")
	.replace(/([a-gr][+\-]?)32\^\^/g,"$116\.")	.replace(/([a-gr][+\-]?)32\^/g,"$116")
	.replace(/([a-gr][+\-]?)16\^\^\^\^\^\^\^/g,"$12")
	.replace(/([a-gr][+\-]?)16\^\^\^\^\^/g,"$14\.")
	.replace(/([a-gr][+\-]?)16\^\^\^/g,"$14")
	.replace(/([a-gr][+\-]?)16\^\^/g,"$18\.")		.replace(/([a-gr][+\-]?)16\^/g,"$18")
	.replace(/([a-gr][+\-]?)8\^\^\^\^\^\^\^/g,"$11")
	.replace(/([a-gr][+\-]?)8\^\^\^\^\^/g,"$12\.")
	.replace(/([a-gr][+\-]?)8\^\^\^/g,"$12")
	.replace(/([a-gr][+\-]?)8\^\^/g,"$14\.")		.replace(/([a-gr][+\-]?)8\^/g,"$14")
	.replace(/([a-gr][+\-]?)4\^\^\^\^\^/g,"$11\.")
	.replace(/([a-gr][+\-]?)4\^\^\^/g,"$11")
	.replace(/([a-gr][+\-]?)4\^\^/g,"$12\.")		.replace(/([a-gr][+\-]?)4\^/g,"$12")
	.replace(/([a-gr][+\-]?)2\^/g,"$11")
	.replace(/([a-gr][+\-]?4?)\^\^\^\^\^/g,"$11\.")
	.replace(/([a-gr][+\-]?4?)\^\^\^/g,"$11")
	.replace(/([a-gr][+\-]?4?)\^\^/g,"$12\.")		.replace(/([a-gr][+\-]?4?)\^/g,"$12")
	.replace(/``([a-g][+\-]?[0-9.]*)/g,">>$1<<")
	.replace(/`([a-g][+\-]?[0-9.]*)/g,">$1<")		// KύX 2018/11/27
	.replace(/\"\"([a-g][+\-]?[0-9.]*)/g,"<<$1>>")
	.replace(/\"([a-g][+\-]?[0-9.]*)/g,"<$1>")	// KύX 2018/11/27
	.replace(/<>/g,"").replace(/<>/g,"").replace(/></g,"").replace(/></g,"");	// KύXE
	for(var k=0;k<ukeys.length;k++){
		var c=ukeys.charAt(k);	mml[i]=mml[i].split(c).join(c+"+");		// a  a+
	}
	for(var k=0;k<dkeys.length;k++){
		var c=dkeys.charAt(k);	mml[i]=mml[i].split(c).join(c+"-");		// a  a-
	}
	mml[i]=mml[i].replace(/a-/g,"g+").replace(/b-/g,"a+").replace(/d-/g,"c+")
	.replace(/e-/g,"d+").replace(/g-/g,"f+")
	.replace(/Div{([<>])(.*)([<>])}/g,"$1Div{$2}$3")
	.replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}2/g,"$18.$28.$38")
	.replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}4/g,"$116.$216.$316")
	.replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}8/g,"$132$232$316")
	.replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}16/g,"$132$232")
	.replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}32/g,"$132");
	if(l==2){
		mml[i]=mml[i].replace(/([a-gr]\+)(\D)/g,"$12$2")
		.replace(/([a-gr])([^0-9+])/g,"$12$2")	// a+a+2, aa2
		.replace(/([a-gr]\+)(\D)/g,"$12$2")
		.replace(/([a-gr])([^0-9+])/g,"$12$2")	// a+a+2, aa2
		.replace(/([a-gr]\+)(\D)/g,"$12$2")
		.replace(/([a-gr])([^0-9+])/g,"$12$2")	// a+a+2, aa2
	.replace(/([a-gr]\+?)$/,"$12");											// s a+a+2, aa2
	}else if(l==4){
		mml[i]=mml[i].replace(/Div{(["`]?.\+?)(["`]?.\+?)(["`]*.\+*)}/g,"$116.$216.$316")
		.replace(/([a-gr]\+)(\D)/g,"$14$2")
		.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
		.replace(/([a-gr]\+)(\D)/g,"$14$2")
		.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
		.replace(/([a-gr]\+)(\D)/g,"$14$2")
		.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
		.replace(/([a-gr]\+*)$/g,"$14");				// s a+a+4, aa4
	}else if(l==8){
		mml[i]=mml[i].replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}/g,"$132$232$316")
		.replace(/([a-gr]\+)(\D)/g,"$18$2")
		.replace(/([a-gr])([^0-9+])/g,"$18$2")	// a+a+8, aa8
		.replace(/([a-gr]\+)(\D)/g,"$18$2")
		.replace(/([a-gr])([^0-9+])/g,"$18$2")	// a+a+8, aa8
		.replace(/([a-gr]\+)(\D)/g,"$18$2")
		.replace(/([a-gr])([^0-9+])/g,"$18$2")	// a+a+8, aa8
		.replace(/([a-gr]\+*)$/,"$18");					// s a+a+8, aa8
	}else if(l==16){
		mml[i]=mml[i].replace(/Div{(["`]*.\+*\)\(["`]*.\+*)(["`]*.\+*)}/g,"$132$232")
		.replace(/([a-gr]\+)(\D)/g,"$116$2")
		.replace(/([a-gr])([^0-9\+])/g,"$116$2")// a+a+16, aa16
		.replace(/([a-gr]\+)(\D)/g,"$116$2")
		.replace(/([a-gr])([^0-9\+])/g,"$116$2")// a+a+16, aa16
		.replace(/([a-gr]\+)(\D)/g,"$116$2")
		.replace(/([a-gr])([^0-9\+])/g,"$116$2")// a+a+16, aa16
		.replace(/([a-gr]\+*)$/,"$116");				// s a+a+16, aa16
	}else if(l==32){
		mml[i]=mml[i].replace(/Div{(["`]*.\+*)(["`]*.\+*)(["`]*.\+*)}/g,"$132")
		.replace(/([a-gr]\+)(\D)/g,"$132$2")
		.replace(/([a-gr])([^0-9+])/g,"$132$2")	// a+a+32, aa32
		.replace(/([a-gr]\+)(\D)/g,"$132$2")
		.replace(/([a-gr])([^0-9+])/g,"$132$2")	// a+a+32, aa32
		.replace(/([a-gr]\+)(\D)/g,"$132$2")
		.replace(/([a-gr])([^0-9+])/g,"$132$2")	// a+a+32, aa32
		.replace(/([a-gr]\+*)$/,"$132");				// s a+a+32, aa32
	}
	mml[i]=mml[i].replace(/Div{(["`]?.\+?)(["`]?.\+?)(["`]*.\+*)}/g,"$116.$216.$316")
	.replace(/([a-gr]\+)(\D)/g,"$14$2")
	.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
	.replace(/([a-gr]\+)(\D)/g,"$14$2")
	.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
	.replace(/([a-gr]\+)(\D)/g,"$14$2")
	.replace(/([a-gr])([^0-9+])/g,"$14$2")	// a+a+4, aa4
	.replace(/([a-gr]\+*)$/g,"$14");				// s a+a+4, aa4
	mml[i]=mml[i].replace(/([a-gr]\+?)32&([a-gr]\+?)32/g,function($0,$1,$2){return $1==$2?$1+"16":$0;})//a32&a32/a+32&a+32	a16/a+16
	.replace(/([a-gr]\+?)16&([a-gr]\+?)16/g,function($0,$1,$2){return $1==$2?$1+"8":$0;})//a16&a16/a+16&a+16		a8/a+8
	.replace(/([a-gr]\+?)8&([a-gr]\+?)8/g,  function($0,$1,$2){return $1==$2?$1+"4":$0;})//a8&a8/a+8&a+8			a4/a+4
	.replace(/([a-gr]\+?)4&([a-gr]\+?)4/g,  function($0,$1,$2){return $1==$2?$1+"2":$0;})//a4&a4/a+4&a+4			a2/a+2
	.replace(/([a-gr]\+?)32&([a-gr]\+?)32/g,function($0,$1,$2){return $1==$2?$1+"16":$0;})//a32&a32/a+32&a+32	a16/a+16
	.replace(/([a-gr]\+?)16&([a-gr]\+?)16/g,function($0,$1,$2){return $1==$2?$1+"8":$0;})//a16&a16/a+16&a+16	a8/a+8
	.replace(/([a-gr]\+?)8&([a-gr]\+?)8/g,  function($0,$1,$2){return $1==$2?$1+"4":$0;})//a8&a8/a+8&a+8		a4/a+4
	.replace(/([a-gr]\+?)4&([a-gr]\+?)4/g,  function($0,$1,$2){return $1==$2?$1+"2":$0;})//a4&a4/a+4&a+4		a2/a+2
	.replace(/([a-gr]\+?)16&([a-gr]\+?)32/g,function($0,$1,$2){return $1==$2?$1+"16.":$0;})//a16&a32/a+16&a+32a16./a+16.
	.replace(/([a-gr]\+?)8&([a-gr]\+?)16/g, function($0,$1,$2){return $1==$2?$1+"8.":$0;})//a8&a16/a+8&a+16		a8./a+8.
	.replace(/([a-gr]\+?)4&([a-gr]\+?)8/g,  function($0,$1,$2){return $1==$2?$1+"4.":$0;})//a4&a8/a+4&a+8		a4./a+4.
	.replace(/([a-gr]\+?)2&([a-gr]\+?)4/g,  function($0,$1,$2){return $1==$2?$1+"2.":$0;})//a2&a4/a+2&a+4		a2./a+2.
	.replace(/r16r32/g,"r16.")							// r16r32		r16.
	.replace(/r8r16([^\.])/g,"r8.$1")				// r8r16		r8.
	.replace(/r4r8([^\.])/g,"r4.$1")				// r4r8			r4.
	.replace(/r2r4([^\.])/g,"r2.$1")				// r2r4			r2.
	.replace(/r8r16$/g,"r8.")								// r8r16		r8.
	.replace(/r4r8$/g,"r4.")								// r4r8			r4.
	.replace(/r2r4$/g,"r2.")								// r2r4			r2.
	.replace(/([a-g]\+?)4&([a-g]\+?)16\.r32/g,
		function($0,$1,$2){return $1==$2?$1+"4.":$0;})		// a4&a16.r32		a4.
	.replace(/([a-g]\+?)2&([a-g]\+?)8\.r16/g,
		function($0,$1,$2){return $1==$2?$1+"2.":$0;})		// a2&a8.r16			a2.
	.replace(/([a-g]\+?)4&([a-g]\+?)16\.\(r[0-9]+\)r32/g,
		function($0,$1,$2){return $1==$2?$1+"4.$3":$0;})	// a4&a16.r4r32		a4.r4
	.replace(/([a-g]\+?)2&([a-g]\+?)8\.\(r[0-9]+\)r16/g,
		function($0,$1,$2){return $1==$2?$1+"2.$3":$0;}) 	// a2&a8.r4r16		a2.r4
	.replace(/[\s&]/g,"")										// Xy[XƏłȂ&폜
	.replace(/(Div)/g," $1")								// Div̑OɃXy[X
	.replace(/([a-grlo<>])/g," $1")					// Xy[X}
	.replace(/^ /g,"")											// s̃Xy[X폜
	.replace(/({.*\) \(.*})/g,"$1$2").replace(/({.*\) \(.*})/g,"$1$2")	// ) (		)(
	.replace(/({.*\) \(.*})/g,"$1$2").replace(/({.*\) \(.*})/g,"$1$2")	// ) (		)(
	.replace(/({.*\) \(.*})/g,"$1$2").replace(/({.*\) \(.*})/g,"$1$2");	// ) (		)(
	var gakufu1="", comment1="	// ";
	var a=mml[i].split(/\s/);
	for(var j=0;j<a.length;j++){
		if(++loop>8000){	WScript.Echo("ERROR: yG܂B");	WScript.Quit();	}
		if(a[j].match(/^o\d/))	o=a[j].replace(/o/,"");		// Kw
		else if(a[j]=="<")	o--;									// K
		else if(a[j]==">")	o++;									// K
		else if(a[j].match(/l\d+/)){}							// w͖
		else if(a[j].match(/^[a-gr]\+?\d+\.?/)){	// x
			var c=Doremi[a[j].charAt(0)];						// c  DO
			if(a[j].match(/^[^r]/))	c+=o;						// DO4
			if(a[j].match(/^.\+/))	c+="_";					// _
			c=c																			// DO1`RA2, DO9`SI9~
			.replace(/DO1/g,"DO2").replace(/RE1/g,"RE2").replace(/MI1/g,"MI2")
			.replace(/FA1/g,"FA2").replace(/SO1/g,"SO2").replace(/RA1[^_]?/g,"RA2")
			.replace(/DO2/g,"DO3").replace(/RE2/g,"RE3").replace(/MI2/g,"MI3")
			.replace(/FA2/g,"FA3").replace(/SO2/g,"SO3").replace(/RA2[^_]?/g,"RA3")
			.replace(/DO9/g,"DO8").replace(/RE9/g,"RE8").replace(/MI9/g,"MI8")
			.replace(/FA9/g,"FA8").replace(/SO9/g,"SO8").replace(/RA9/g,"RA8")
			.replace(/SI9/g,"SI8");
			if(!(c in Count)){	WScript.Echo("ERROR1("+i+"s) "+mml[i]+"\n"+c+" ͎g܂");	WScript.Quit();}
			else if(!(c in NoteList)){							// ߂ẲȂ
				NoteList[c]=iNote++;									// NoteListɒǉ
				Cnt+=Count[c]+",";										// `g
				SW+=sw[c]+",";												// gOpg g`e[uStepWidth
			}
			var aa=a[j]
			a[j]=a[j].replace(/^[a-gr]\+?/,"").replace(/\./,"_");
			var L="L"+a[j];															// L16
			if(!(L in Onpu)){	WScript.Echo("ERROR2("+i+"s) "+mml[i]+"\n"+aa+" ͎g܂"); WScript.Quit();}
			else if(!(L in OnpuList)){									// ߂ẲȂ
				OnpuList[L]=iOnpu++;
				Len+=Onpu[L]+",";
			}
			if(OnpuList[L]<8){
				if(NoteList[c]<32){
					gakufu1+=NoteList[c]+"|"+(OnpuList[L]*32)+",";
					comment1+=c+"|"+L+",";										// DO4|L16
				}else{
					gakufu1+=NoteList["REST"]+"|"+(OnpuList[L]*32)+",";
					comment1+="REST|"+L+",";									// 32ȏɂȂxŗ
				}
			}else									gakufu1+="0,";					// 8ȏɂȂI
		}else										gakufu1+=a[j];					// ̑s̏ꍇ
	}
	if(gakufu1!="")	sPart[track]+="\t"+gakufu1+comment1+"\n";
}
}
if(iNote>=32)	WScript.Echo("Warning: "+iNote+"ނ̉gp(ő31)Bꕔxɒu܂B");
if(iOnpu>8)		WScript.Echo("ERROR3: "+iOnpu+"ނ̉gp(ő8)Br܂ŉt܂B");

var	mymelo_h=fso.CreateTextFile(folder+"/mymelo2/mymelo2.h",true);
var s="// This file contains melody data created by mymelo2.wsf\n\n"
s+="#define MYMELO\n";
s+="#define WAVEFORM "+waveform+"\n";													// g`(Ɏw)
s+="#define NMELO "+(nMelo+1)+"	// number of melody\n";				// Ȑ(1Ȓǉ)
s+="#define NTRACK "+(track>nTrack?track:nTrack)+"	// number of track(1..3)\n\n";
tempo.push(Tempo);	// e|ǉ
s+="const uint16_t tempo[]={"+tempo.join(",")+"};	// TEMPO of each melody\n\n";	// 20240313 uint16_t

u=sMelo.match(/const uint8_t Len\d+\[\] PROGMEM=\{.*\};\n+/g);// ̋Ȃ
if(u)	s+=u.join("");																					// ΂
s+="const uint8_t Len"+nMelo+"[] PROGMEM={"+Len+"0};\n";			// ݂̋Ȃǉ
var pointerArray=sMelo.match(/const pLen\[\] PROGMEM=\{(.*)\};/)[1];
pointerArray=(pointerArray==""?[]:pointerArray.split(","));		// : "".split(",")  [] ł͂Ȃ [""]
pointerArray.push("Len"+nMelo);																// |C^[ǉ
s+="const uint8_t* const pLen[] PROGMEM={"+pointerArray.join(",")+"};	// pointer to score length array of each melody\n\n";
if(waveform==0){		// `gȂ
	u=sMelo.match(/const uint16_t Cnt\d+\[\] PROGMEM=\{.*\};\n+/g);// ̋Ȃ
	if(u)	s+=u.join("");																					// ΂
	s+="const uint16_t Cnt"+nMelo+"[] PROGMEM={0,0,"+Cnt+"0};\n";	// ݂̋Ȃǉ
	pointerArray=sMelo.match(/const pCnt\[\] PROGMEM=\{(.*)\};/)[1];
	pointerArray=(pointerArray==""?[]:pointerArray.split(","));		// : "".split(",")  [] ł͂Ȃ [""]
	pointerArray.push("Cnt"+nMelo);																// |C^[ǉ
	s+="const uint16_t* const pCnt[] PROGMEM={"+pointerArray.join(",")+"};	// pointer to count array of each melody\n\n";
}else{							// g܂͌g(t͎Opg))Ȃ
	u=sMelo.match(/const uint16_t SW\d+\[\] PROGMEM=\{.*\};\n+/g);// ̋Ȃ
	if(u)	s+=u.join("");																					// ΂
	s+="const uint16_t SW"+nMelo+"[] PROGMEM={0,0,"+SW+"0};\n";		// ݂̋Ȃǉ
	pointerArray=sMelo.match(/const pSW\[\] PROGMEM=\{(.*)\};/)[1];
	pointerArray=(pointerArray==""?[]:pointerArray.split(","));		// : "".split(",")  [] ł͂Ȃ [""]
	pointerArray.push("SW"+nMelo);																// |C^[ǉ
	s+="const uint16_t* const pSW[] PROGMEM={"+pointerArray.join(",")+"};	// pointer to step width array of each melody\n\n";
}

u=sMelo.match(/const uint8_t Melo\d+Part\d+\[\] PROGMEM=\{[\s\S]*?\};\n+/g);// ̋Ȃ
if(u)	s+=u.join("");																						// ΂
s+="const uint8_t Melo"+nMelo+"Part1[] PROGMEM={\t// "+fso.getFileName(filename)+"\n";	// ݂̋Ȃǉ
s+=sPart[1]+"\t0};\n"
s+="const uint8_t Melo"+nMelo+"Part2[] PROGMEM={\n";
s+=sPart[2]+"\t0};\n"
s+="const uint8_t Melo"+nMelo+"Part3[] PROGMEM={\n";
s+=sPart[3]+"\t0};\n"

pointerArray=sMelo.match(/const pPart1\[\] PROGMEM=\{(.*)\};/)[1];	// Part1
pointerArray=(pointerArray==""?[]:pointerArray.split(","));// : "".split(",")  [] ł͂Ȃ [""]
pointerArray.push("Melo"+nMelo+"Part1");	// ݂̋Ȃǉ Melo0Part1, ...
s+="const uint8_t* const pPart1[] PROGMEM={"+pointerArray.join(",")+"};\n";

pointerArray=sMelo.match(/const pPart2\[\] PROGMEM=\{(.*)\};/)[1];	// Part2
pointerArray=(pointerArray==""?[]:pointerArray.split(","));// : "".split(",")  [] ł͂Ȃ [""]
pointerArray.push("Melo"+nMelo+"Part2");	// ݂̋Ȃǉ Melo0Part2, ...
s+="const uint8_t* const pPart2[] PROGMEM={"+pointerArray.join(",")+"};\n";

pointerArray=sMelo.match(/const pPart3\[\] PROGMEM=\{(.*)\};/)[1];	// Part3
pointerArray=(pointerArray==""?[]:pointerArray.split(","));// : "".split(",")  [] ł͂Ȃ [""]
pointerArray.push("Melo"+nMelo+"Part3");	// ݂̋Ȃǉ Melo0Part3, ...
s+="const uint8_t* const pPart3[] PROGMEM={"+pointerArray.join(",")+"};\n";

mymelo_h.Write(s);
mymelo_h.Close();
WScript.Echo("f[^ǉ܂B");

function readFile(fname){
	ado.Type=2;									// Text
	ado.charset="_autodetect_all";
	ado.Open();
	ado.LoadFromFile(fname);
	var text=ado.ReadText(-1);	// adReadAll
	ado.Close();
	return text;
}
function writeFile(fname, text){	// UTF-8Ńt@C̕ۑ
	ado.Type=2;									// Text
//ado.charset="utf-8";				// SHIFT_JIS/utf-8
	ado.Open();
	ado.WriteText(text);				// adWriteLine
	ado.SaveToFile(fname, 2);		// adSaveCreateOverWrite
	ado.Close();
}
</script>
</job>
