<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; HTA/JScript: Автоматический разбор параметров командной строки]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=7049</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7049&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «HTA/JScript: Автоматический разбор параметров командной строки».]]></description>
		<lastBuildDate>Sat, 07 Apr 2012 10:35:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58969#p58969</link>
			<description><![CDATA[<p><strong>JSman</strong><br />В обеих темах мы участвовали вместе. И я хорошо знаю, что они представляют. Не уверен, что использование CreateWindow и GetResource в данном случае оправданно более простой путь.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 07 Apr 2012 10:35:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58969#p58969</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58966#p58966</link>
			<description><![CDATA[<p>А что касается монстра, Вы-то уж знаете, что прекрасно понимаю, что 250 строк - это не ужас. Я поэтому их взял в кавычки. Я намекал об объеме кода что ли, лишних вычислениях тогда, кода можно пойти простым путем.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 07 Apr 2012 09:17:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58966#p58966</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58965#p58965</link>
			<description><![CDATA[<p><strong>JSman</strong>, теперь понял. Я думал, что Вы имеете в виду обратный процесс — получение WScript изнутри HTA.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 07 Apr 2012 09:15:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58965#p58965</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58964#p58964</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Да. Это тоже решение. Но не возникает ли дискомфорта при мысли где хранить разметку, стили, внешние файлы - все естественное для html-файлов и чужеродное в этих js/wsf файлах?</p></blockquote></div><p>Да нет, не возникает. Если рассматривать JS, то можно успешно хранить в комментриях (как-то писал об этом), если WSF - тег Resource. </p><p> </p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Запустите сценарий, передав ему одноименный ключ дважды (можно и более), но с разными значениями. <br />cscript test.js /key:value1 /key:value2</p></blockquote></div><p>Ну почему баг? Ключ - это тоже идентификатор, а если бы значение было бы массивом, то нам бы пришлось постоянно проверять значение на тип.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 07 Apr 2012 09:15:28 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58964#p58964</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58963#p58963</link>
			<description><![CDATA[<p>Кстати пришло время рассказать про баги в WSCript.Arguments.Named<br /></p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>существует одна проблема с именованными аргументами, о которой можно поговорить отдельно</p></blockquote></div><p>Запустите сценарий, передав ему одноименный ключ дважды (можно и более), но с разными значениями. <br />cscript test.js /key:value1 /key:value2<br /></p><div class="codebox"><pre><code>var named = WScript.Arguments.Named;

WScript.Echo(named.Count);
WScript.Echo(named.length);

for (var e = new Enumerator(named); ! e.atEnd(); e.moveNext()) {
    var k = e.item();
    var v = named.item(k);
    WScript.Echo(k + &#039; = &#039; + v);
}</code></pre></div><p>Так уж видимо рэдмондские волшебники решили, что WScript.Arguments.Named должен хранить первый найденный аргумент. Почему не последний? Почему не все одноименные, в виде массива?</p><div class="quotebox"><cite>JSman пишет:</cite><blockquote><p>Я предложил &lt;...&gt; внедрить код HTA в JS или WSF.</p></blockquote></div><p>Да. Это тоже решение. Но не возникает ли дискомфорта при мысли где хранить разметку, стили, внешние файлы - все естественное для html-файлов и чужеродное в этих js/wsf файлах? </p><p>Ну и про 250 строк - там и код, и пустые строки, и обширные комментарии. Обфускатор все это сокращает до одной строки )))</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 07 Apr 2012 08:41:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58963#p58963</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58960#p58960</link>
			<description><![CDATA[<p><strong>alexii</strong>, еще раз постараюсь пояснить:<br /><strong>Rumata</strong> предлагает решение из &quot;250 строк&quot; для HTA - компонент, который делает то же самое, что и встроенный объект WScript.Arguments, который обеспечивает корректную обработку параметров командной строки.<br />Я предложил не использовать компонент, а внедрить код HTA в JS или WSF. Ведь уже написана замечательная функция CreateWindow, которая генерирует окно HTA.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 07 Apr 2012 07:45:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58960#p58960</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58925#p58925</link>
			<description><![CDATA[<p><strong>Rumata</strong>, приношу свои извинения, я неверно приписал Вам процитированное, вместо <strong>JSman</strong>. Ему же был адресован вопрос.</p><p>Исправил.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 06 Apr 2012 15:58:49 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58925#p58925</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58902#p58902</link>
			<description><![CDATA[<p><strong>JSman</strong><br />Зачем? Есть файл, назовем его test.hta, готовое HTML-приложение, которое запускается с дополнительными аргументами. Вот эти аргументы и разбираются. </p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Чьей командной строки?</p></blockquote></div><p>HTML-приложения</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 06 Apr 2012 12:25:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58902#p58902</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58898#p58898</link>
			<description><![CDATA[<div class="quotebox"><cite>JSman пишет:</cite><blockquote><p>…в том числе корректную обработку командной строки.</p></blockquote></div><p><em>Чьей</em> командной строки?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 06 Apr 2012 11:20:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58898#p58898</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58896#p58896</link>
			<description><![CDATA[<p><strong>Rumata</strong>, а почему просто не воспользоваться функцией CreateWindow из сценария для порождения окна HTA? Ведь тот подход даст использование WScript, в том числе корректную обработку командной строки. Зачем городить монстра на 250 строк, если можно и без него обойтись?</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Fri, 06 Apr 2012 10:43:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58896#p58896</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58884#p58884</link>
			<description><![CDATA[<p>Небольшое улучшение, отразившееся в значениях, сохраняемых в <strong>HTA.arguments</strong>. Теперь этот объект хранит каждый аргумент в &quot;сыром&quot; виде, включая имеющиеся кавычки на концах аргументов. Исправление введено для того чтобы <br />-- различать внутри <strong>HTA.arguments</strong> именованные аргументы вида <strong>/key:value</strong> от безымянных аргументов вида <strong>&quot;/key:value&quot;</strong> <br />-- все-таки знать (на всякий случай) в каком виде пришли данные, - например, <strong>/key</strong>, <strong>key:</strong> или <strong>/key:&quot;&quot;</strong></p><p>В остальном реализация и примеры на js и vbs рабочие. Чтобы не множить сущности, поправил только код файла HTA.js в первом сообщении.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 05 Apr 2012 22:42:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58884#p58884</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58831#p58831</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Я обычно пишу на VBScript. Смогу ли я использовать данный функционал совместно с основным кодом, написанным на VBScript?</p></blockquote></div><p>Да. С небольшими оговорками.<br />1. Методы должны указываться явно, в форме <strong>объект.метод()</strong>. Опуская круглые скобки вы сломаете код, так как <strong>объект.метод</strong> вернет текстовое представление метода, а не результат его выполнения. <br />2. Метод <strong>HTA.arguments.named.keys()</strong> возвращает список ключей в виде массива. Однако в VBS этот строка имен ключей, разделенных запятыми. Видимо это издержки разного представления массивов в JS и VBS. </p><p>Ниже приведен &quot;перевод&quot; примера, выполненного с JS на VBS. <br /></p><div class="codebox"><pre><code>
&lt;html&gt;
&lt;head&gt;
&lt;script src=&quot;HTA.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;pre&gt;
&lt;script language=vbscript&gt;

document.writeln &quot;Full name    : &quot;, HTA.appFullName
document.writeln &quot;Path name    : &quot;, HTA.appPath
document.writeln &quot;File name    : &quot;, HTA.appName
document.writeln &quot;Command Line : &quot;, HTA.cmdLine

sub printArgs(name, args)
	dim keys
	dim L

	on error resume next
	keys = array()
	keys = split(args.keys(), &quot;,&quot;)

	L = args.length() - 1

	document.writeln
	document.writeln &quot;&lt;h3&gt;&quot;, name &amp; &quot; (&lt;code&gt;&quot; &amp; (L + 1) &amp; &quot;&lt;/code&gt;)&lt;/h3&gt;&quot;

	dim k, v
	for i = 0 to L
		k = i
		k = keys(i)

		v = args.item(k)
		document.writeln k, &quot; : &quot;, v
	next
	on error goto 0
end sub

printArgs &quot;Common&quot;,  HTA.arguments
printArgs &quot;Unnamed&quot;, HTA.arguments.unnamed
printArgs &quot;Named&quot;,   HTA.arguments.named

&lt;/script&gt;
&lt;/pre&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>.<br />P.S.: <br />Исправил одну строку кода библиотеки в первом сообщении, так как из-за опечатки неправильно определялась длина массива именованных аргументов.<br />Убрал одну лишнюю строку из определения регулярного выражения.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 04 Apr 2012 12:58:41 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58831#p58831</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58805#p58805</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>…и создал монстра - модуль более чем в 250 строк кода, комментариев и пустых строк, претендующий на универсальность.</p></blockquote></div><p>Ну, монстр и монстр <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />, подумаешь… Если действительно универсальный и работает — это не страшно, главное, чтобы его можно было прозрачно (т.е. — никак не затрагивая ничего «снаружи») подключать к своему HTA.</p><p>P.S. Я обычно пишу на VBScript. Смогу ли я использовать данный функционал совместно с основным кодом, написанным на VBScript?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 04 Apr 2012 06:14:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58805#p58805</guid>
		</item>
		<item>
			<title><![CDATA[HTA/JScript: Автоматический разбор параметров командной строки]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58796#p58796</link>
			<description><![CDATA[<p><em>Начало разговора в теме <a href="http://script-coding.com/forum/viewtopic.php?pid=58409#p58409">JavaScript: форматирование числа</a>. Предлагаю продолжить обсуждение здесь. </em></p><p>Задача ставится следующим образом. Необходимо разобрать командную строку, с помощью которой было запущено приложение HTA. Известно, что WSH приложения имею мощный интерфейс для работы с параметрами командной строки как со всеми аргументами, так и с отдельными типами (именованные или неименованные):</p><div class="codebox"><pre><code>// все аргументы
var args = WScript.Arguments;
for (var i = 0; i &lt; args.length; i++) {
	var arg = args.item(i);
	WScript.Echo(arg);
}

// неименованные, или безымянные аргументы
var uArgs = WScript.Arguments.Unnamed;
for (var i = 0; i &lt; uArgs.length; i++) {
	var arg = uArgs.item(i);
	WScript.Echo(arg);
}

// именованные аргументы
var nArgs = WScript.Arguments.Named;
for (var e = new Enumerator(nArgs); ! e.atEnd(); e.moveNext()) {
	var k = e.item(i);
	var v = nArgs.item(k);
	WScript.Echo(k + &#039; = &#039; + v);
}</code></pre></div><p>Как видно, именованные аргументы имеют несколько отличный способ доступа к самим значениям, но это не вызывает проблемы. Видно, что аргументы &quot;унифицируются&quot; - начальные и конечные кавычки удаляются (хотя удаляются, на мой взгляд, не совсем корректно и существует одна проблема с именованными аргументами, о которой можно поговорить отдельно). </p><p>Однако HTML-приложения таких удобных средств для работы с командной строкой не имеют. Существует только свойство commandLine строкового типа доступное из тега &lt;hta:application&gt;. То есть все аргументы в одной куче. Разработчику самому предоставляется возможность решать - как ему интерпретировать переданную информацию. </p><p>В ходе обсуждения в теме предложен способ, который позволяет решить данную проблему:<br /></p><div class="codebox"><pre><code>
var re = /&quot;(.*?)&quot;(?:\s+|$)|([\S]+)/g;
var r;
while ( r = re.exec(s) ) {
	var arg = r[1] || r[2];
	alert(arg);
}</code></pre></div><p>Плюсами данного решения являются:<br />-- лаконичность<br />-- универсальность</p><p>Можно было бы на этом и остановиться, но некоторое время назад я решил пойти дальше и <strong>создал монстра - модуль более чем в 250 строк кода, комментариев и пустых строк</strong>, претендующий на универсальность. Полный разбор всех командной строки, группировка аргументов на именованные и строковые, автоматическое создание строковых, именованных, логических и простых аргументов. </p><p>Очевидно, что в погоне за универсальностью чаще всего создается монстр; вероятно, что данное решение содержит недочеты, которые не были обнаружены изначально, и могут всплыть позже. </p><p>Интерпретация аргументов:<br /></p><div class="quotebox"><blockquote><p>строковые аргументы:<br />строка - простая строка. не содержащая пробелы<br />&quot;строка&quot; - простая строка, допускаются пробелы и кавычки</p><p>простые именованные аргументы:<br />/ключ - значение ключа - пустая срока, проверяется наличие ключа</p><p>логические ключи:<br />/ключ- - значение ключа false<br />/ключ+ - значение ключа true</p><p>строковые аргументы:<br />/ключ:значение - значение ключа - строка без пробелов и кавычек<br />/ключ:&quot;значение&quot; - значение ключа - любая строка символов, включая пробелы и кавычки</p></blockquote></div><p>В результате работы создается глобальный объект HTA, содержащий несколько свойств и методов<br /></p><div class="quotebox"><blockquote><p>appFullName<br />	Возвращает полный путь текущего приложения. </p><p>appPath<br />	Возвращает только путь к приложению. </p><p>appName<br />	Возвращает только имя файла текущего приложения. </p><p>cmdLine<br />	Возвращает командную строку. </p><p>arguments<br />	Возвращает полный список всех аргументов, переданных приложению. </p><p>	Методы: item(index), length()</p><p>arguments.unnamed<br />	Список строковых аргументов в виде массива. </p><p>	Методы: item(index), length()</p><p>arguments.named<br />	Возвращает объект-список именованных аргументов. <br />	Каждый ключ это массив значений, даже если передано было одно значение. <br />	Таким образом можно передать любое количество одноименных ключей. </p><p>	Именованный аргумент может быть простым, логическим или строковым. </p><p>	Логический аргумент передается приложению как /ключ+, чтобы <br />	передать значение true или /ключ-, чтобы передать значение false. </p><p>	Простой именованный аргумент не имеет значений и передается как /ключ. </p><p>	Строковый аргумент передается приложению как пара /ключ:значение. </p><p>	Методы: exists(key), item(key), keys(), length()</p></blockquote></div><p>.<br />Ниже приведен тестовый файл, который выводит все аргументы, переданные скрипту. Для проверки необходимо поэкспериментировать с разным набором и количеством аргументов. </p><p><strong>test.hta</strong><br /></p><div class="codebox"><pre><code>
&lt;html&gt;
&lt;head&gt;
&lt;script src=&quot;HTA.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;pre&gt;
&lt;script&gt;

document.writeln(&#039;Full name    : &#039;, HTA.appFullName);
document.writeln(&#039;Path name    : &#039;, HTA.appPath);
document.writeln(&#039;File name    : &#039;, HTA.appName);
document.writeln(&#039;Command Line : &#039;, HTA.cmdLine);

function printArgs(name, args)
{
	var keys = args.keys ? args.keys() : [];

	var len = keys.length || args.length();

	document.writeln();
	document.writeln(&#039;&lt;h3&gt;&#039;, name + &#039; (&lt;code&gt;&#039; + len + &#039;&lt;/code&gt;)&lt;/h3&gt;&#039;);
	for (var i = 0; i &lt; len; i++) {
		var k = keys[i] || i;
		document.writeln(k, &#039; : &#039;, args.item(k));
	}
};

printArgs(&#039;Common&#039;,  HTA.arguments);
printArgs(&#039;Unnamed&#039;, HTA.arguments.unnamed);
printArgs(&#039;Named&#039;,   HTA.arguments.named);

&lt;/script&gt;
&lt;/pre&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>.<br /><strong>HTA.js</strong><br /></p><div class="codebox"><pre><code>

(function()
{
	// Duck-typing check for MSIE engine
	if ( this !== this.window ) {
		return;
	}

	var d = this.document;
	if ( ! d || ! d.all || ! d.getElementsByTagName || ! d.createElement || ! d.insertBefore ) {
		return;
	}

	// Create the hta:application tag if it is necessary
	var htApp = d.getElementsByTagName(&#039;application&#039;)[0];
	if ( ! htApp ) {
		htApp = d.createElement(&#039;hta:application&#039;);
		var head = d.getElementsByTagName(&#039;head&#039;)[0];
		head.insertBefore(htApp, head.firstChild);
	}

	// Only HTAs have this property
	var cmdLine = htApp.commandLine;
	if ( ! cmdLine ) {
		return;
	}

	var re = new RegExp([
		// named arguments rounded or not by the quote characters
		// 	/named
		// where the &#039;named&#039; term stands for one of the following:
		// 	/key+		key is true
		// 	/key-		key is false
		// 	/key
		// 	/key:
		// 	/key:&quot;&quot;		key is an empty string
		// 	/key:value
		// 	/key:&quot;value&quot;	key contains the string &#039;value&#039;
		&#039;(&#039;, 
			&#039;\\/&#039;, 
			&#039;([\\S]+?)&#039;, 
			&#039;(?:&#039;, 
				// /key+
				&#039;(\\+)&#039;, 

				&#039;|&#039;, 

				// /key-
				&#039;(\\-)&#039;, 

				&#039;|&#039;, 

				// /key:&quot;value&quot;
				// /key:&quot;&quot;
				&#039;:&quot;(.*?)&quot;&#039;, 

				&#039;|&#039;, 

				// /key:value
				// /key:
				&#039;:([\\S]*)&#039;, 
			&#039;)?&#039;, 

			&#039;|&#039;, 

			// unnamed arguments rounded by the quote characters
			// 	&quot;value&quot;
			&#039;&quot;(.*?)&quot;&#039;, 

			&#039;|&#039;, 

			// unnamed arguments without the quote characters
			// 	value
			&#039;([\\S]+)&#039;, 
		&#039;)&#039;, 
		&#039;(?:\\s+|$)&#039;, 
	].join(&#039;&#039;), &#039;g&#039;);

	var r;

	// It&#039;s impossible but we are paranoic
	r = re.exec(cmdLine);
	if ( ! r ) {
		return;
	}

	var fullname = (r[7] || r[8]).replace(/&quot;/g, &#039;&#039;);
	var filename = fullname.replace(/^.+\\/, &#039;&#039;);
	var pathname = fullname.replace(/\\[^\\]+$/, &#039;&#039;);

	var args = [];

	var unnamed = [];

	var named = {};
	var named_length = 0;
	var named_keys = [];

	while ( r = re.exec(cmdLine) ) {
		var k = r[2];
		var v = r[3] ? true : r[4] ? false : r[5] || r[6] || r[7] || r[8];

		if ( ! k &amp;&amp; ! v ) {
			continue;
		}

		args.push(r[1]);

		if ( ! k ) {
			unnamed.push(v);
			continue;
		}

		named_length++;
		named[k] = (named[k] || []).concat(v);
		(function()
		{
			for (var i = 0; i &lt; named_keys.length; i++) {
				if ( k == named_keys[i] ) {
					return;
				}
			}
			named_keys.push(k);
		})();
	}

	var HTA = {
		arguments: {
			named: {
				exists: function(key)
				{
					return named.hasOwnProperty(key);
				}, 
				item: function(key)
				{
					return named[key];
				}, 
				keys: function()
				{
					return [].concat(named_keys);
				}, 
				length: function()
				{
					return named_keys.length;
				}
			}, 
			unnamed: {
				item: function(index)
				{
					return unnamed[index];
				}, 
				length: function()
				{
					return unnamed.length;
				}
			}, 
			item: function(index)
			{
				return args[index];
			}, 
			length: function()
			{
				return args.length;
			}
		}, 
		appFullName: fullname, 
		appPath: pathname, 
		appName: filename, 
		cmdLine: cmdLine
	};

	this.HTA = HTA;
})();</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 03 Apr 2012 20:13:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58796#p58796</guid>
		</item>
	</channel>
</rss>
