<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4326143438359177627</id><updated>2012-02-27T09:59:17.351+05:30</updated><category term='linux'/><category term='VBScript'/><category term='NTFS'/><category term='Posix'/><category term='IO'/><category term='C'/><category term='boo'/><category term='COM'/><category term='customisation'/><category term='Windows'/><category term='DocumentViewer'/><category term='VC++'/><category term='WSH'/><category term='Streams'/><category term='Windows messages'/><category term='C++'/><category term='turbo C'/><category term='terminal'/><category term='String formatting'/><category term='shell'/><category term='WScript'/><category term='Win32'/><category term='.net'/><category term='Ubuntu'/><category term='booz'/><category term='turbo C++'/><category term='JavaScript'/><category term='V8'/><category term='JScript'/><category term='WPF'/><title type='text'>Sandeep's blog</title><subtitle type='html'>Just FYI!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-2734406392896707407</id><published>2011-11-21T09:46:00.001+05:30</published><updated>2012-02-27T09:59:17.376+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='customisation'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Replacing the default gnome terminal</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;If you have ever wanted to replace the default terminal included in ubuntu with something else but were not sure if the new terminal would have the same level of integration with the gnome desktop then today is your lucky day.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The process is relatively simple but for the sake of complete integration it is slightly more involved than simply launching the desired terminal program directly. I have chosen roxterm as my replacement terminal and as such the following description will be specific to it but nevertheless can be easily modified to adapt to other terminal programs.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Here is what you will get after we are done...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;1. Choosing "Open in terminal" in nautilus will launch your replacement terminal (you need to have the nautilus-open-terminal plugin installed).&lt;br /&gt;&lt;br /&gt;2. All new terminal invocations will open a new tab in a single terminal window instead of cluttering your task-bar.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Here is what you need to do...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modify shortcuts&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Modify all shortcuts (launchers) to launch roxterm instead of gnome-terminal. Right click on the launchers in the panel and choose properties. Then change the command field to "roxterm --tab" (without the quotes)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Register roxterm with gnome as the default terminal&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(Assumption: roxterm has already been installed)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Create a file called&amp;nbsp;launch_roxterm in ~/bin (or wherever you please but then you'll have to modify the following steps)&lt;br /&gt;&lt;br /&gt;2. Paste the following contents in it and save&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/bin/bash working_dir=`echo "$*" | awk '{for(f=1;f&amp;lt;=NF;++f) {if($f == "cd") {print $(f+1);}}}' | sed s/\'//g` cd $working_dir &amp;amp;&amp;amp; roxterm --tab -e $SHELL&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;3. Make the launch_roxterm file executable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$ chmod u+x launch_roxterm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4. Run the following command in a terminal.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$ gconftool-2 --type string --set /desktop/gnome/applications/terminal/exec "$HOME/bin/launch_roxterm"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;5. Install nautilus-open-terminal from synaptic if you don't have it already. Then right click on a blank area in nautilus and choose "open in terminal" from the context menu to open a new roxterm terminal or a new tab if roxterm is already running.&lt;br /&gt;&lt;br /&gt;Note: nautilus-open-terminal, roxterm etc are available in the synaptics repository of your ubuntu distribution. I am using Ubuntu 10.10. Your mileage may vary.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-2734406392896707407?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/2734406392896707407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2011/11/replacing-default-gnome-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2734406392896707407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2734406392896707407'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2011/11/replacing-default-gnome-terminal.html' title='Replacing the default gnome terminal'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-1176306080447260541</id><published>2011-10-16T16:49:00.000+05:30</published><updated>2011-10-16T16:52:49.677+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Posix'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='V8'/><title type='text'>Using the V8 javascript shell (D8)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;V8 is a fast and nimble JavaScript engine used by the Google chrome browser. People interested in experimenting with this JavaScript engine will find the D8 shell environment supplied with the V8 source code to be highly useful. But unfortunately I was not able to find any ready to use documentation for D8 online. So here is my attempt at creating a small user guide for the uninitiated. You can download and build V8 by following the instructions given &lt;a href="http://code.google.com/apis/v8/build.html"&gt;here&lt;/a&gt;. Alternatively you can fork the (official?) V8 &lt;a href="https://github.com/v8"&gt;source code&lt;/a&gt;&amp;nbsp;on github.com.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Build d8 by using the following command in a console...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;~/Source/v8$ scons mode=debug arch=x64 console=readline d8&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Then run d8&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;~/Source/v8$ ./d8_g&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;V8 version 3.7.1 (candidate) [console: readline]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;So without further ado here is the list of commands you can use on D8...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;1. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;print(arg1, arg2, ..., argN)&lt;/span&gt; - As the name&amp;nbsp;suggests&amp;nbsp;the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt; method can be used to print to the console. Note print automatically inserts a new line character at the end.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; print("Hello", "world", 5, 3.14, [1,2], {"a":5})&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Hello world 5 3.14 1,2 [object Object]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;d8&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;write(arg1, arg2, ..., argN)&lt;/span&gt;&amp;nbsp;- Same as &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt; but does not insert a newline character at the end.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;read(filename)&lt;/span&gt; - Read a file from the disk (or anywhere you want) and store contents in a JavaScript string. The first argument is the file name (can be a full path, relative path etc the operating system path conventions apply)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; var s = read("LICENSE")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; s&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;This license applies to all parts of V8 that are not externally&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;maintained libraries. &amp;nbsp;The externally maintained libraries used by V8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...omitted...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;readline() &lt;/span&gt;- Read a line from console. Actually you can read multiple lines from the console if you end each line with the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;'\'&lt;/span&gt; character.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; l = readline()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;This is a line of text.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;This is a line of text.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; readline()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;line1\&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;line2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;line1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;line2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note: The the text entered by the user is echoed again by the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;readline()&lt;/span&gt; method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;load(filename)&lt;/span&gt; - load and execute a JavaScript file from disk (or from anywhere you like).&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; load("hello.js")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Hello&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;quit([exitCode])&lt;/span&gt; - Exit D8 shell. The exit code is optional.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;quit()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;~/Source/v8$&amp;nbsp;echo $?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; quit(12)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;~/Source/v8$&amp;nbsp;echo $?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;12&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;7.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;version()&lt;/span&gt; - Print the current version of the D8 shell.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; version()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;3.7.1 (candidate)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;8. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;enableProfiler() / disableProfiler()&lt;/span&gt; - Consult official profiler &lt;a href="http://code.google.com/p/v8/wiki/V8Profiler"&gt;documentation&lt;/a&gt; for more details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;POSIX Commands&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now if you are on a posix machine then you have access to the following additional commands.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Note: The following descriptions have been adapted from the v8 source code comments.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.system("program_name", ["arg1", "arg2", ...], timeout1, timeout2)&lt;/span&gt; - Run an external command, passing the arguments to the program. &amp;nbsp;The standard output &amp;nbsp;of the program will be picked up and returned as a multiline string. &amp;nbsp;If &amp;nbsp;timeout1 is present then it should be a number. &amp;nbsp;-1 indicates no timeout &amp;nbsp;and a positive number is used as a timeout in milliseconds that limits the &amp;nbsp;time spent waiting between receiving output characters from the program. &amp;nbsp;timeout2, if present, should be a number indicating the limit in &amp;nbsp;milliseconds on the total running time of the program. &amp;nbsp;Exceptions are &amp;nbsp;thrown on timeouts or other errors or if the exit status of the program &amp;nbsp;indicates an error.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("date")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Sun Oct 16 19:52:46 IST 2011&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.chdir(dir)-&lt;/span&gt; changes directory to the given directory.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.chdir("obj")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("pwd")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;/home/xyz/Source/Cpp/v8/obj&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.chdir("..")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("pwd")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;/home/xyz/Source/Cpp/v8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.setenv(variable, value)&lt;/span&gt;&amp;nbsp;- sets an environment variable. &amp;nbsp;Repeated calls to this method leak memory due to the API of setenv in the standard C library.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.setenv("myvar", "myvalue")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("printenv", ["myvar"])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;myvalue&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.unsetenv(variable)&lt;/span&gt;&amp;nbsp;- unsets an environment variable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.unsetenv("myvar")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("printenv", ["myvar"])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;(d8):1: Child exited with status 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;os.system("printenv", ["myvar"])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;^&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5.&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.umask(value)-&lt;/span&gt;calls the umask system call and returns the old umask.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; oldmask = os.umask(0777)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;18&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; oldmask.toString(8)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;22&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;6.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;os.mkdirp(name, mask)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; - creates a directory. &amp;nbsp;The mask (if present) is anded &amp;nbsp;with the current umask. &amp;nbsp;Intermediate directories are created if necessary. &amp;nbsp;An exception is not thrown if the directory already exists. &amp;nbsp;Analogous to &amp;nbsp;the "mkdir -p" command.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.mkdirp("abc")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.system("ls")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;abc&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;7. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rmdir(dir)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; - remove specified directory.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt; os.rmdir("abc")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;d8&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-1176306080447260541?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/1176306080447260541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2011/10/using-v8-javascript-shell-d8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/1176306080447260541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/1176306080447260541'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2011/10/using-v8-javascript-shell-d8.html' title='Using the V8 javascript shell (D8)'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-1652129903650082333</id><published>2010-03-02T15:24:00.004+05:30</published><updated>2010-03-02T15:36:52.310+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='DocumentViewer'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Removing the DocumentViewer search text box</title><content type='html'>&lt;a href="http://sdx2000.googlegroups.com/web/DocumentViewerWithoutFind.zip?gda=FXW2dVAAAAC9k_kfI0DqbWZR7GwcGiBZ7bwGZPjo08SGd2y4FdSowqeSaEGez62_UH-XVTBWjRXrFKLBxB8A8GjqheMlRQqtbcVT3VtYGKLco-_l-8AzjQ&amp;amp;gsc=58QPywsAAACMVgFZTNycCKkcA7YJE_0b"&gt;Here&lt;/a&gt; is the complete code required to create a custom control hosting the document viewer without the search text box. This control is ready to be dropped onto any design surface (WPF or Winforms)&lt;br /&gt;&lt;br /&gt;NOTE: You need to add a reference to the PresentationUI.dll assembly. For some reason I could not find this assembly in the .Net references dialog but I was able to find it on my computer at &lt;br /&gt;the following locations&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;C:\WINDOWS\assembly\GAC_MSIL\PresentationUI\3.0.0.0__31bf3856ad364e35\PresentationUI.dll&lt;br /&gt;C:\WINDOWS\Microsoft.NET\Framework\v3.0\WPF\PresentationUI.dll&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-1652129903650082333?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/1652129903650082333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2010/03/removing-documentviewer-search-text-box.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/1652129903650082333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/1652129903650082333'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2010/03/removing-documentviewer-search-text-box.html' title='Removing the DocumentViewer search text box'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-8034799079287380415</id><published>2009-10-31T00:28:00.014+05:30</published><updated>2010-07-27T09:41:56.634+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='JScript'/><category scheme='http://www.blogger.com/atom/ns#' term='String formatting'/><title type='text'>JavaScript / VBScript string interpolation</title><content type='html'>JavaScript (JScript) and VBScript are two pretty nifty programming / automation tools on the windows platform. You can run JS / VBS programs on a plain vanilla Windows XP (or above) PC without installing anything. They can be used for a variety of purposes from automating MS-WORD, EXCEL, Internet explorer etc to doing basic everyday tasks like copying files and folders programmatically. But if you have used them for any length of time then I think you will agree that these languages are not feature complete by any means. But this does not mean that you cannot improvise! Here is my own take on providing formatted string output support for JavaScript and VBScript. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JScript&lt;/b&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;String.prototype.Trim = function() {&lt;br /&gt;    return this.replace(/^\s\s*/, "").replace(/\s\s*$/, "");;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function sprint(str)&lt;br /&gt;{&lt;br /&gt;    var re = /\$(?:\{(.*?)\}|(\w[\w\d]*))/g; //The ? makes the * non-greedy&lt;br /&gt;&lt;br /&gt;    var arr;&lt;br /&gt;    var retVal = "";&lt;br /&gt;    var lastIndex = 0;&lt;br /&gt;    &lt;br /&gt;    while ((arr = re.exec(str)) != null)&lt;br /&gt;    {&lt;br /&gt;       retVal += str.substring(lastIndex, arr.index);&lt;br /&gt;       var expr = "";&lt;br /&gt;       for(j=1; j&amp;lt;arr.length; j++)&lt;br /&gt;       {&lt;br /&gt;            if(arr[j].Trim() != "")&lt;br /&gt;            {&lt;br /&gt;                expr = arr[j].Trim();&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;       }&lt;br /&gt;       retVal += eval(expr);&lt;br /&gt;       lastIndex = arr.lastIndex;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    //Note using substr below and not substring&lt;br /&gt;    retVal += str.substr(lastIndex);&lt;br /&gt;    return retVal;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function print(str)&lt;br /&gt;{&lt;br /&gt;    WScript.Echo(sprint(str))&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/////////////////  USAGE  ///////////////&lt;br /&gt;var greeting  = "Hello"&lt;br /&gt;var firstName = "SDX"&lt;br /&gt;var lastName  = "2000"&lt;br /&gt;&lt;br /&gt;var i=1&lt;br /&gt;&lt;br /&gt;print("$greeting $firstName ${lastName}!")&lt;br /&gt;print("3+5=${3+5}")&lt;br /&gt;print("Square root of 81 is ${   Math.sqrt(81)   }")&lt;br /&gt;print("${i = i+1}") //increaments i&lt;br /&gt;print("${i == i+1}") //does a comparison&lt;br /&gt;//NOTE: WScript.Echo does not return anything hence you can see an "undefined"&lt;br /&gt;//in the output&lt;br /&gt;print("${WScript.Echo(greeting +\" \" + firstName +\" \" + lastName)}")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Output&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Hello SDX 2000!&lt;br /&gt;3+5=8&lt;br /&gt;Square root of 81 is 9&lt;br /&gt;2&lt;br /&gt;false&lt;br /&gt;Hello SDX 2000&lt;br /&gt;undefined&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;VBScript&lt;/b&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;option explicit&lt;br /&gt;&lt;br /&gt;dim firstName, lastName, greeting&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function sprint(str)&lt;br /&gt;    Dim regEx, matches, match, subMatch, smatches, i, expr&lt;br /&gt;    set regEx = new RegExp&lt;br /&gt;    regEx.IgnoreCase = true ' This is VBScript after all&lt;br /&gt;    regEx.Global = true&lt;br /&gt;    regEx.Pattern = "\$(?:\{(.*?)\}|(\w[\w\d]*))" 'The ? makes the * non-greedy&lt;br /&gt;    &lt;br /&gt;    set matches = regEx.Execute(str)&lt;br /&gt;    &lt;br /&gt;    for each match in matches&lt;br /&gt;        for i=0 to match.SubMatches.Count-1 'Unable to 'for each' over SubMatches for some reason&lt;br /&gt;            if trim(match.SubMatches(i)) &amp;lt;&amp;gt; "" then&lt;br /&gt;                expr = trim(match.SubMatches(i))&lt;br /&gt;            end if&lt;br /&gt;        next&lt;br /&gt;        &lt;br /&gt;        str = replace(str, Match.Value, eval(expr)) 'Note this will replace all instances of the expression&lt;br /&gt;    next&lt;br /&gt;    sprint = str&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;sub print(str)&lt;br /&gt;    WScript.Echo sprint(str)&lt;br /&gt;end sub&lt;br /&gt;&lt;br /&gt;' *************  USAGE  ************&lt;br /&gt;greeting  = "Hello"&lt;br /&gt;firstName = "SDX"&lt;br /&gt;lastName  = "2000"&lt;br /&gt;&lt;br /&gt;dim i&lt;br /&gt;i=1&lt;br /&gt;&lt;br /&gt;print "$greeting $firstName ${LastName}!"&lt;br /&gt;print "3+5=${3+5}"&lt;br /&gt;print "Square root of 81 is ${sqr(81)}"&lt;br /&gt;print "${i = i+1}" 'Prints false; does not increment i&lt;br /&gt;print "${msgbox(firstName &amp;amp; lastName,0,greeting)}"&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Output&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Hello SDX 2000!&lt;br /&gt;3+5=8&lt;br /&gt;Square root of 81 is 9&lt;br /&gt;False&lt;br /&gt;1&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-8034799079287380415?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/8034799079287380415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2009/10/javascript-vbscript-string.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/8034799079287380415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/8034799079287380415'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2009/10/javascript-vbscript-string.html' title='JavaScript / VBScript string interpolation'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-5543029890397309419</id><published>2009-10-29T00:17:00.000+05:30</published><updated>2011-11-21T17:03:31.384+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows messages'/><title type='text'>Windows messages for workstation lock/unlock and other events</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Have you ever wanted to write a program which could take some action based on common user activities like logging on and off, locking or unlocking the computer etc. If yes then what you need is &lt;a href="http://msdn.microsoft.com/en-us/library/aa383828(VS.85).aspx"&gt;WM_WTSSESSION_CHANGE&lt;/a&gt;. Its a windows message which can be intercepted to determine if the user has locked the workstation and gone for lunch, among other things.&lt;br /&gt;&lt;br /&gt;But before you run off to code your latest earth shattering application you need to know that you will not receive this message in your windows message queue unless you opt in i.e. you need to call &lt;a href="http://msdn.microsoft.com/en-us/library/aa383841(VS.85).aspx"&gt;WTSRegisterSessionNotification&lt;/a&gt; and tell windows that you are interested in receiving these messages.&lt;br /&gt;&lt;br /&gt;Some applications which I can think of off the top of my head are...&lt;br /&gt;1. Write an app to change the status message of your favorite chat client&lt;br /&gt;2. Maintain a record of user login/logout/lock/unlock times&lt;br /&gt;&lt;br /&gt;Please feel free to chip in with your own ideas.&lt;br /&gt;&lt;br /&gt;Bye for now.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-5543029890397309419?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/5543029890397309419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2009/10/windows-messages-for-workstation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/5543029890397309419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/5543029890397309419'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2009/10/windows-messages-for-workstation.html' title='Windows messages for workstation lock/unlock and other events'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-3344923599802072093</id><published>2009-10-28T18:02:00.017+05:30</published><updated>2010-07-27T10:28:36.539+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='COM'/><category scheme='http://www.blogger.com/atom/ns#' term='WSH'/><category scheme='http://www.blogger.com/atom/ns#' term='WScript'/><category scheme='http://www.blogger.com/atom/ns#' term='VC++'/><title type='text'>Using WScript.Shell from VC++ Part - I</title><content type='html'>The WScript.Shell component provides some much sought after functionality. It provides some easy to use APIs for doing things which often require convoluted code in plain VC++. For example creating a windows shortcut is a simple matter of calling IWshShell::CreateShortcut()! Can it get any easier? (please feel free to let me know if it does :) )&lt;br /&gt;&lt;br /&gt;&lt;div&gt;But naively trying to import the WScript.Shell library into your project will expose you to a world of hurt. Here's a small preview...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;wshtest.cpp(11) : warning C4278: 'ExpandEnvironmentStrings': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;wshtest.cpp(11) : warning C4278: 'AddPrinterConnection': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;wshtest.cpp(11) : warning C4278: 'SetDefaultPrinter': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;wshtest.cpp(11) : warning C4278: 'DeleteFile': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;wshtest.cpp(11) : warning C4278: 'MoveFile': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;wshtest.cpp(11) : warning C4278: 'CopyFile': identifier in type library 'Wscript.Shell' is already a macro; use the 'rename' qualifier&lt;br /&gt;debug\wshom.tlh(1159) : warning C4003: not enough actual parameters for macro 'GetFreeSpace'&lt;br /&gt;debug\wshom.tlh(1159) : error C2059: syntax error : 'constant'&lt;br /&gt;debug\wshom.tlh(1159) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int&lt;br /&gt;debug\wshom.tlh(1159) : warning C4183: '_variant_t': missing return type; assumed to be a member function returning 'int'&lt;br /&gt;debug\wshom.tlh(1160) : error C2146: syntax error : missing ';' before identifier 'GetTotalSize'&lt;br /&gt;debug\wshom.tlh(1160) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Ok now getting to what you may be most interested in, here's the code which manages to import the WScript.Shell library and still compile...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;// WSHTest.cpp : Defines the entry point for the console application.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#import "progid:Wscript.Shell" no_namespace \&lt;br /&gt;rename("FreeSpace", "WshFreeSpace") \&lt;br /&gt;rename("ExpandEnvironmentStrings", "WshExpandEnvironmentStrings") \&lt;br /&gt;rename("AddPrinterConnection", "WshAddPrinterConnection") \&lt;br /&gt;rename("SetDefaultPrinter", "WshSetDefaultPrinter") \&lt;br /&gt;rename("DeleteFile", "WshDeleteFile") \&lt;br /&gt;rename("MoveFile", "WshMoveFile") \&lt;br /&gt;rename("CopyFile", "WshCopyFile") &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In the next part we shall actually see how to do some interesting things with our new found powers!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ASIDE:&lt;/b&gt; The WScript documentation seems to be intended for script users who generally do not have to care for things like interfaces, co-classes etc (which is a good thing sometimes). But it's difficult to work with &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;WScript&lt;/span&gt; in C++ if you do not know the interface, co-class names etc. But there is an easy way out of this quandary just compile the above source code and look in the output directory for a file called &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;wshom.tlh&lt;/span&gt; this file contains the declarations of all the interfaces, co-classes etc within the component)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-3344923599802072093?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/3344923599802072093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2009/10/using-wscriptshell-from-vc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/3344923599802072093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/3344923599802072093'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2009/10/using-wscriptshell-from-vc.html' title='Using WScript.Shell from VC++ Part - I'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-8869205642050129730</id><published>2009-10-24T01:53:00.000+05:30</published><updated>2009-10-24T02:00:56.205+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='boo'/><category scheme='http://www.blogger.com/atom/ns#' term='booz'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Booz: A new interactive shell on the block</title><content type='html'>&lt;span style="font-family: verdana, arial, helvetica, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Hey guys I have started a new boo based command shell project on codeplex. Its called booz :) here's a link to it&amp;nbsp;&lt;a href="http://booz.codeplex.com/wikipage" style="color: #336699; text-decoration: none;"&gt;http://booz.codeplex.com/wikipage&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Please check it out and give me some feedback. Its pre-alpha at this stage but I plan to refine it until it becomes the shell of choice for boo aficionados all over the world :)&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;I plan to take it in a direction&amp;nbsp;different&amp;nbsp;from booish (the std. boo interpreter/REPL) and make it more appealing to those who wish to use boo as replacement for other regular shells (like cmd.exe for example). Its not just going to be an interpreter/REPL for regular boo but will be augmented with more shell like features.&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Regards,&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Sandeep Datta&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-8869205642050129730?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/8869205642050129730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2009/10/booz-new-interactive-shell-on-block.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/8869205642050129730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/8869205642050129730'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2009/10/booz-new-interactive-shell-on-block.html' title='Booz: A new interactive shell on the block'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-2848145178195361105</id><published>2009-10-22T01:43:00.006+05:30</published><updated>2010-07-27T10:29:09.787+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='NTFS'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Streams'/><category scheme='http://www.blogger.com/atom/ns#' term='IO'/><title type='text'>NTFS streams in .net</title><content type='html'>&lt;div&gt;NTFS streams cannot be opened directly with regular .Net file IO classes, they throw a "System.NotSupportedException: The given path's format is not supported" exception. Here is a C# code sample demonstrating a work-around to the "cannot open NTFS streams in .net (using regular classes)" problem...&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;using System;&lt;br /&gt;using System.IO;&lt;br /&gt;using Microsoft.Win32.SafeHandles;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;namespace NTFSStreams&lt;br /&gt;{&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]&lt;br /&gt;        static extern SafeFileHandle CreateFile(&lt;br /&gt;        string fileName,&lt;br /&gt;        [MarshalAs(UnmanagedType.U4)] FileAccess fileAccess,&lt;br /&gt;        [MarshalAs(UnmanagedType.U4)] FileShare fileShare,&lt;br /&gt;        IntPtr securityAttributes,&lt;br /&gt;        [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,&lt;br /&gt;        [MarshalAs(UnmanagedType.U4)] FileAttributes flags,&lt;br /&gt;        IntPtr template);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            //Note the special file name construct used to specify the NTFS stream&lt;br /&gt;            const string fileName = "test.txt:stream1";&lt;br /&gt;&lt;br /&gt;            //Yes we are going to use CreateFile to bypass the awkward restrictions&lt;br /&gt;            //imposed by the .net file IO classes&lt;br /&gt;            SafeFileHandle handle = CreateFile(fileName&lt;br /&gt;            , FileAccess.ReadWrite&lt;br /&gt;            , FileShare.Read&lt;br /&gt;            , IntPtr.Zero&lt;br /&gt;            , FileMode.OpenOrCreate&lt;br /&gt;            , FileAttributes.Normal&lt;br /&gt;            , IntPtr.Zero);&lt;br /&gt;&lt;br /&gt;            if (handle.IsInvalid)&lt;br /&gt;                Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());&lt;br /&gt;&lt;br /&gt;            //Open a .net stream for writing.&lt;br /&gt;            //We will close it here before reading for demonstration purposes&lt;br /&gt;            using (FileStream stream = new FileStream(handle, FileAccess.ReadWrite))&lt;br /&gt;            {&lt;br /&gt;                using (StreamWriter writer = new StreamWriter(stream))&lt;br /&gt;                {&lt;br /&gt;                    writer.Write("Hello world!");&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            //Note: The file handle returned by the call to CreateFile is closed &lt;br /&gt;            //by the SafeFileHandle wrapper around it hence we need to reopen the&lt;br /&gt;            //file here.&lt;br /&gt;            //Alternatively you could have reset the file stream position and &lt;br /&gt;            //opened a StreamReader on the above FileStream itself.&lt;br /&gt;            handle = CreateFile(fileName&lt;br /&gt;            , FileAccess.Read&lt;br /&gt;            , FileShare.Read&lt;br /&gt;            , IntPtr.Zero&lt;br /&gt;            , FileMode.Open&lt;br /&gt;            , FileAttributes.Normal&lt;br /&gt;            , IntPtr.Zero);&lt;br /&gt;&lt;br /&gt;            using (FileStream stream = new FileStream(handle, FileAccess.Read))&lt;br /&gt;            {&lt;br /&gt;                using (StreamReader reader = new StreamReader(stream))&lt;br /&gt;                {&lt;br /&gt;                    while (!reader.EndOfStream)&lt;br /&gt;                    {&lt;br /&gt;                        Console.WriteLine(reader.ReadLine());&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style="font-family: 'Times New Roman';"&gt;&lt;span style="white-space: normal;"&gt;&lt;span style="font-family: monospace;"&gt;&lt;span style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms810604.aspx#ntfs5_codesamp1"&gt;Programmer's Perspective on NTFS 2000 Part 1: Stream and Hard Link&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pinvoke.net/default.aspx/kernel32/CreateFile.html"&gt;PInvoke.net&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://win32.mvps.org/ntfs/streams.html"&gt;http://win32.mvps.org/ntfs/streams.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-2848145178195361105?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/2848145178195361105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2009/10/ntfs-streams-in-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2848145178195361105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2848145178195361105'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2009/10/ntfs-streams-in-net.html' title='NTFS streams in .net'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-2434666293818706265</id><published>2007-12-21T22:43:00.000+05:30</published><updated>2007-12-21T22:45:15.021+05:30</updated><title type='text'>My Technorati claim</title><content type='html'>&lt;a href="http://technorati.com/claim/gixtjiw33" rel="me"&gt;Technorati Profile&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-2434666293818706265?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/2434666293818706265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2007/12/my-technorati-claim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2434666293818706265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/2434666293818706265'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2007/12/my-technorati-claim.html' title='My Technorati claim'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4326143438359177627.post-5971881757604522335</id><published>2007-07-28T12:16:00.000+05:30</published><updated>2009-06-03T00:45:09.973+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='turbo C'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='turbo C++'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>A superior alternative to Turbo C/C++</title><content type='html'>Time and again I have advised newbies just starting out with C/C++ programming to just stay away from the evil Turbo C/C++ IDE/Compilers. But I realize that the Turbo C/C++ compilers have a very luring graphics library (I am an ex addict myself!) which makes it all the more difficult to make the transition to more saner and competent platforms such as the GNU C++ etc compilers.&lt;br /&gt;&lt;br /&gt;Also it would be unfair to ask a beginner in C++ to master the intricacies of GDI/DirectX programming while just starting out with C++!&lt;br /&gt;&lt;br /&gt;But don't despair there is an easy way out...&lt;br /&gt;&lt;br /&gt;I recommend that newbies checkout the awesome C++ IDE Quincy 2005 from none other  Al Stevens himself. Here is a &lt;a href="http://codecutter.org/tools/quincy/index.html"&gt;link&lt;/a&gt; to it. It comes bundled along with the awesome WinBGIm turbo C/C++ graphics library which has the same API as the turbo C/C++ library. People familiar with the turbo C++ graphics functions will feel right at home with it. Further more you enjoy the comfort of "graphics.h" programming in a 32bit standards compliant environment. Not just that now your graphics programs are not artificially limited to the color and resolution restrictions imposed by the turbo C++ compilers/libraries. You can code in &lt;span style="font-style: italic;"&gt;true color&lt;/span&gt; (~16 million colors) or better now!&lt;br /&gt;&lt;br /&gt;I hope this will persuade all people addicted to Turbo C++ to move to a saner platform.&lt;br /&gt;&lt;br /&gt;UPDATE: Since then I have found that Visual Studio C++ Express edition is another alternative certainly worthy of consideration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4326143438359177627-5971881757604522335?l=www.sandeepdatta.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.sandeepdatta.com/feeds/5971881757604522335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.sandeepdatta.com/2007/07/superior-alternative-to-turbo-cc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/5971881757604522335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4326143438359177627/posts/default/5971881757604522335'/><link rel='alternate' type='text/html' href='http://www.sandeepdatta.com/2007/07/superior-alternative-to-turbo-cc.html' title='A superior alternative to Turbo C/C++'/><author><name>Sandeep Datta</name><uri>https://profiles.google.com/102107604450846070895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Une7SiAICJs/AAAAAAAAAAI/AAAAAAAAAAA/ghRzwJv966E/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
