<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE TIP SYSTEM "http://tcl.activestate.com/cgi-bin/tct/tip/tipxml.dtd">
<!-- Converted at Thu Feb 09 08:03:38 GMT 2012 -->
<!-- TIP AutoGenerator - written by Donal K. Fellows -->

<TIP number='83'>
<header><title>Augment Tcl_EvalFile with Tcl_EvalChannel and Tcl_EvalUrl</title><author address="mailto:marian@mail.jozep.com.au">Marian Szczepkowski</author><author address="mailto:dgp@users.sf.net"></author><status type='project' state='withdrawn' tclversion="8.5" vote='prior'>$Revision: 1.6 $</status><history></history><created day='24' month='jan' year='2002' /></header>
<abstract>This TIP adds the ability to load Tcl files directly from URLs to the core, together with a basic mechanism to simply evaluate a stream of characters from a channel.</abstract>
<body><section title="Proposal">
<para>I propose to split the <emph style="italic">Tcl_EvalFile</emph> function into two components to enable the [source] command to use URL&apos;s to obtain source material.</para>
<para>This will mean splitting <emph style="italic">Tcl_EvalFile</emph> into <emph style="italic">Tcl_EvalFile</emph> and <emph style="italic">Tcl_EvalChannel</emph> which are the two logical entities. Maintaining <emph style="italic">Tcl_EvalFile</emph> will preserve backward compatability.</para>
<para>Creating <emph style="italic">Tcl_EvalChannel</emph> will provide generic functionality for future use.</para>
<para>Adding <emph style="italic">Tcl_EvalUrl</emph> will enable handling standard URL format strings.</para>
<para>This would enable this [source <url ref="http://anywhere.com/file.tcl"/>] to be used.</para>
<para>Code will also need to be added to <emph style="italic">Tcl_SourceObjCmd</emph> to select functionality requested.</para>
</section>
<section title="Pro.">
<para>In a corporate environment where scripts are subject to change but the interface is not, this allows scripts to be stored remotely on a central server.</para>
<para>This also allows Tcl to interwork in a networked environment.</para>
</section>
<section title="Con.">
<para>Security!!!!</para>
<para>This may mean in the long run adding a signing layer, but don&apos;t use it if you don&apos;t want to.</para>
</section>
<section title="Sample">
<para>I figure it looking something like this. Snipped from 8.3 source.</para>
</section>
<section title="Tcl_SourceObjCmd">
<verbatim><vline encoding='base64'>aW50</vline><vline encoding='base64'>VGNsX1NvdXJjZU9iakNtZChkdW1teSwgaW50ZXJwLCBvYmpjLCBvYmp2KQ==</vline><vline encoding='base64'>ICAgIENsaWVudERhdGEgZHVtbXk7CQkvKiBOb3QgdXNlZC4gKi8=</vline><vline encoding='base64'>ICAgIFRjbF9JbnRlcnAgKmludGVycDsJCS8qIEN1cnJlbnQgaW50ZXJwcmV0ZXIuICov</vline><vline encoding='base64'>ICAgIGludCBvYmpjOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICov</vline><vline encoding='base64'>ICAgIFRjbF9PYmogKkNPTlNUIG9ianZbXTsJLyogQXJndW1lbnQgb2JqZWN0cy4gKi8=</vline><vline encoding='base64'>ew==</vline><vline encoding='base64'>ICAgIGNoYXIgKmJ5dGVzOw==</vline><vline encoding='base64'>ICAgIGludCByZXN1bHQ7</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGlmIChvYmpjICE9IDIpIHs=</vline><vline encoding='base64'>ICAgICAgICBUY2xfV3JvbmdOdW1BcmdzKGludGVycCwgMSwgb2JqdiwgImZpbGVOYW1lIik7</vline><vline encoding='base64'>ICAgICAgICByZXR1cm4gVENMX0VSUk9SOw==</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGJ5dGVzID0gVGNsX0dldFN0cmluZyhvYmp2WzFdKTs=</vline><vline encoding='base64'>ICAgIGlmIChzdHJzdHIocHRyLCI6Ly8iKSkgew==</vline><vline encoding='base64'>ICAgICAgICByZXN1bHQgPSBUY2xfRXZhbEZpbGUoaW50ZXJwLCBieXRlcyk7</vline><vline encoding='base64'>ICAgIH0gZWxzZSB7</vline><vline encoding='base64'>ICAgICAgICByZXN1bHQgPSBUY2xfRXZhbFVybChpbnRlcnAsIGJ5dGVzKTs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIHJldHVybiByZXN1bHQ7</vline><vline encoding='base64'>fQ==</vline></verbatim>
</section>
<section title="Tcl_EvalFile">
<verbatim><vline encoding='base64'>aW50</vline><vline encoding='base64'>VGNsX0V2YWxGaWxlKGludGVycCwgZmlsZU5hbWUp</vline><vline encoding='base64'>ICAgIFRjbF9JbnRlcnAgKmludGVycDsgICAgICAgICAvKiBJbnRlcnByZXRlciBpbiB3aGljaCB0byBwcm9jZXNzIGZpbGUuICov</vline><vline encoding='base64'>ICAgIGNoYXIgKmZpbGVOYW1lOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGZpbGUgdG8gcHJvY2Vzcy4gIFRpbGRlLXN1YnN0aXR1dGlvbg==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aWxsIGJlIHBlcmZvcm1lZCBvbiB0aGlzIG5hbWUuICov</vline><vline encoding='base64'>ew==</vline><vline encoding='base64'>ICAgIGludCByZXN1bHQsIGxlbmd0aDs=</vline><vline encoding='base64'>ICAgIHN0cnVjdCBzdGF0IHN0YXRCdWY7</vline><vline encoding='base64'>ICAgIEludGVycCAqaVB0cjs=</vline><vline encoding='base64'>ICAgIFRjbF9EU3RyaW5nIG5hbWVTdHJpbmc7</vline><vline encoding='base64'>ICAgIGNoYXIgKm5hbWUsICpzdHJpbmc7</vline><vline encoding='base64'>ICAgIFRjbF9DaGFubmVsIGNoYW47</vline><vline encoding='base64'>ICAgIFRjbF9PYmogKm9ialB0cjs=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIG5hbWUgPSBUY2xfVHJhbnNsYXRlRmlsZU5hbWUoaW50ZXJwLCBmaWxlTmFtZSwgJm5hbWVTdHJpbmcpOw==</vline><vline encoding='base64'>ICAgIGlmIChuYW1lID09IE5VTEwpIHs=</vline><vline encoding='base64'>ICAgICAgICByZXR1cm4gVENMX0VSUk9SOw==</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIHJlc3VsdCA9IFRDTF9FUlJPUjs=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGlmIChUY2xTdGF0KG5hbWUsICZzdGF0QnVmKSA9PSAtMSkgew==</vline><vline encoding='base64'>ICAgICAgICBUY2xfU2V0RXJybm8oZXJybm8pOw==</vline><vline encoding='base64'>ICAgICAgICBUY2xfQXBwZW5kUmVzdWx0KGludGVycCwgImNvdWxkbid0IHJlYWQgZmlsZSBcIiIsIGZpbGVOYW1lLA==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICJcIjogIiwgVGNsX1Bvc2l4RXJyb3IoaW50ZXJwKSwgKGNoYXIgKikgTlVMTCk7</vline><vline encoding='base64'>ICAgICAgICBnb3RvIGVuZDs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGNoYW4gPSBUY2xfT3BlbkZpbGVDaGFubmVsKGludGVycCwgbmFtZSwgInIiLCAwNjQ0KTs=</vline><vline encoding='base64'>ICAgIGlmIChjaGFuID09IChUY2xfQ2hhbm5lbCkgTlVMTCkgew==</vline><vline encoding='base64'>ICAgICAgICBUY2xfUmVzZXRSZXN1bHQoaW50ZXJwKTs=</vline><vline encoding='base64'>ICAgICAgICBUY2xfQXBwZW5kUmVzdWx0KGludGVycCwgImNvdWxkbid0IHJlYWQgZmlsZSBcIiIsIGZpbGVOYW1lLA==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICJcIjogIiwgVGNsX1Bvc2l4RXJyb3IoaW50ZXJwKSwgKGNoYXIgKikgTlVMTCk7</vline><vline encoding='base64'>ICAgICAgICBnb3RvIGVuZDs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIHJlc3VsdCA9IFRjbF9FdmFsQ2hhbm5lbChpbnRlcnAsIGNoYW4pOw==</vline><vline encoding='base64'></vline><vline encoding='base64'>ICBlbmQ6</vline><vline encoding='base64'>ICAgIFRjbF9EU3RyaW5nRnJlZSgmbmFtZVN0cmluZyk7</vline><vline encoding='base64'>ICAgIHJldHVybiByZXN1bHQ7</vline><vline encoding='base64'>fQ==</vline></verbatim>
</section>
<section title="Tcl_EvalUrl">
<verbatim><vline encoding='base64'>aW50</vline><vline encoding='base64'>VGNsX0V2YWxVcmwoaW50ZXJwLCBmaWxlTmFtZSk=</vline><vline encoding='base64'>ICAgIFRjbF9JbnRlcnAgKmludGVycDsJLyogSW50ZXJwcmV0ZXIgaW4gd2hpY2ggdG8gcHJvY2VzcyBmaWxlLiAqLw==</vline><vline encoding='base64'>ICAgIGNoYXIgKmZpbGVOYW1lOwkvKiBOYW1lIG9mIFVSTCB0byBwcm9jZXNzLiAqLw==</vline><vline encoding='base64'>ew==</vline><vline encoding='base64'>ICAgIHJldHVybiBUQ0xfRVJST1I7</vline><vline encoding='base64'>fQ==</vline></verbatim>
</section>
<section title="Tcl_EvalChannel">
<verbatim><vline encoding='base64'>aW50</vline><vline encoding='base64'>VGNsX0V2YWxDaGFubmVsKGludGVycCwgY2hhbik=</vline><vline encoding='base64'>ICAgIFRjbF9JbnRlcnAgKmludGVycDsgLyogSW50ZXJwcmV0ZXIgaW4gd2hpY2ggdG8gcHJvY2VzcyBmaWxlLiAqLw==</vline><vline encoding='base64'>ICAgIFRjbF9DaGFubmVsIGNoYW47ICAgLyogTmFtZSBvZiBmaWxlIHRvIHByb2Nlc3MuICov</vline><vline encoding='base64'>ew==</vline><vline encoding='base64'>ICAgIGludCByZXN1bHQsIGxlbmd0aDs=</vline><vline encoding='base64'>ICAgIHN0cnVjdCBzdGF0IHN0YXRCdWY7</vline><vline encoding='base64'>ICAgIGNoYXIgKm9sZFNjcmlwdEZpbGU7</vline><vline encoding='base64'>ICAgIEludGVycCAqaVB0cjs=</vline><vline encoding='base64'>ICAgIGNoYXIgKm5hbWUsICpzdHJpbmc7</vline><vline encoding='base64'>ICAgIFRjbF9PYmogKm9ialB0cjs=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIHJlc3VsdCA9IFRDTF9FUlJPUjs=</vline><vline encoding='base64'>ICAgIG9ialB0ciA9IFRjbF9OZXdPYmooKTs=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGlmIChUY2xfUmVhZENoYXJzKGNoYW4sIG9ialB0ciwgLTEsIDApIDwgMCkgew==</vline><vline encoding='base64'>ICAgICAgICBUY2xfQ2xvc2UoaW50ZXJwLCBjaGFuKTs=</vline><vline encoding='base64'>ICAgICAgICBUY2xfQXBwZW5kUmVzdWx0KGludGVycCwgImNvdWxkbid0IHJlYWQgZmlsZSBcIiIsIGZpbGVOYW1lLA==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICJcIjogIiwgVGNsX1Bvc2l4RXJyb3IoaW50ZXJwKSwgKGNoYXIgKikgTlVMTCk7</vline><vline encoding='base64'>ICAgICAgICBnb3RvIGVuZDs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIGlmIChUY2xfQ2xvc2UoaW50ZXJwLCBjaGFuKSAhPSBUQ0xfT0spIHs=</vline><vline encoding='base64'>ICAgICAgICBnb3RvIGVuZDs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGlQdHIgPSAoSW50ZXJwICopIGludGVycDs=</vline><vline encoding='base64'>ICAgIG9sZFNjcmlwdEZpbGUgPSBpUHRyLT5zY3JpcHRGaWxlOw==</vline><vline encoding='base64'>ICAgIGlQdHItPnNjcmlwdEZpbGUgPSBmaWxlTmFtZTs=</vline><vline encoding='base64'>ICAgIHN0cmluZyA9IFRjbF9HZXRTdHJpbmdGcm9tT2JqKG9ialB0ciwgJmxlbmd0aCk7</vline><vline encoding='base64'>ICAgIHJlc3VsdCA9IFRjbF9FdmFsRXgoaW50ZXJwLCBzdHJpbmcsIGxlbmd0aCwgMCk7</vline><vline encoding='base64'>ICAgIGlQdHItPnNjcmlwdEZpbGUgPSBvbGRTY3JpcHRGaWxlOw==</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIGlmIChyZXN1bHQgPT0gVENMX1JFVFVSTikgew==</vline><vline encoding='base64'>ICAgICAgICByZXN1bHQgPSBUY2xVcGRhdGVSZXR1cm5JbmZvKGlQdHIpOw==</vline><vline encoding='base64'>ICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFRDTF9FUlJPUikgew==</vline><vline encoding='base64'>ICAgICAgICBjaGFyIG1zZ1syMDAgKyBUQ0xfSU5URUdFUl9TUEFDRV07</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgICAgICAvKg==</vline><vline encoding='base64'>ICAgICAgICAgKiBSZWNvcmQgaW5mb3JtYXRpb24gdGVsbGluZyB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQu</vline><vline encoding='base64'>ICAgICAgICAgKi8=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgICAgICBzcHJpbnRmKG1zZywgIlxuICAgIChmaWxlIFwiJS4xNTBzXCIgbGluZSAlZCkiLCBmaWxlTmFtZSw=</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgIGludGVycC0+ZXJyb3JMaW5lKTs=</vline><vline encoding='base64'>ICAgICAgICBUY2xfQWRkRXJyb3JJbmZvKGludGVycCwgbXNnKTs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICBlbmQ6</vline><vline encoding='base64'>ICAgIFRjbF9EZWNyUmVmQ291bnQob2JqUHRyKTs=</vline><vline encoding='base64'>ICAgIHJldHVybiByZXN1bHQ7</vline><vline encoding='base64'>fQ==</vline></verbatim>
</section>
<section title="Comments">
<para>The VFS extension interface of Tcl 8.4 plus the tclvfs and vfs::http packages provide the ability to [source] an URL. I believe that makes this proposal out of date.</para>
</section>
<section title="Copyright">
<para>This document has been placed in the public domain.</para>
</section>
</body></TIP>

