CINXE.COM

BOOK The Tcl Programming Language

<!DOCTYPE html> <html lang='en'> <head> <meta charset='utf-8'> <meta name='viewport' content='width=device-width, initial-scale=1'> <meta name='description' content='Tclers wiki'> <meta name='author' content=''> <link rel='icon' href='/img/favicon.ico'> <title>BOOK The Tcl Programming Language</title> <!-- Latest compiled and minified CSS --> <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'> <link rel='stylesheet' href='/css/nikit.css' type='text/css'> <link rel='stylesheet' href='/css/sh_style.css' type='text/css'> <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.0/css/theme.bootstrap_3.min.css' type='text/css'> <script src='//cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js'></script> </head> <body onload='sh_highlightDocument(); nikitUser();'> <nav class='navbar navbar-fixed-top navbar-inverse'> <div class='container'> <div class='navbar-header'> <button type='button' class='navbar-toggle' data-toggle='collapse' data-target='#myNavbar'> <span class='icon-bar'></span> <span class='icon-bar'></span> <span class='icon-bar'></span> </button> <ul class='nav navbar-nav'> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'>&nbsp;Tcler&#39;s Wiki<span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a href='/welcome'>Home</a></li> <li><a rel='nofollow' href='/recent'>Changes</a></li> <li><a rel='nofollow' href='/_random'>Random page</a></li> <li><a rel='nofollow' href='/_new'>New page</a></li> </ul> </li> </ul> </div> <div class='collapse navbar-collapse' id='myNavbar'> <ul class='nav navbar-nav'> <li class='dropdown' id='li_idPageEdit' style='display:none'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_idPageEdit>Page</span><span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/_edit/BOOK+The+Tcl+Programming+Language?A=1'>Comment</a></li> <li><a rel='nofollow' hidden='true' href='/_edit/BOOK+The+Tcl+Programming+Language'>Edit</a></li> <li><a rel='nofollow' href='/_upload/BOOK+The+Tcl+Programming+Language'>Upload</a></li> <li><a rel='nofollow' href='/ref/BOOK+The+Tcl+Programming+Language'>References</a></li> <li><a rel='nofollow' href='/history/BOOK+The+Tcl+Programming+Language'>History</a></li> <li><hr></li> <li><a href='#be91940b79f469101df9a50544b6873aa5509a12f1f93f1cb5e3be3990d344b3'>Support</a> </li> <li><a href='#5458f54ffe10aa484eee915280d2afebf0fd21f6048e24042ee964cd2c202efb'>Errata</a> </li> <li><a href='#5eb6cf647d2c5d14a044e2d103dcef4cf0cdc872434c374debc1043092bc4746'>Discussion</a> </li> </ul> </li> <li class='dropdown' id='li_idPageNoEdit' style='display:none'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_idPageNoEdit>Page</span><span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/ref/BOOK+The+Tcl+Programming+Language'>References</a></li> <li><a rel='nofollow' href='/history/BOOK+The+Tcl+Programming+Language'>History</a></li> <li><hr></li> <li><a href='#be91940b79f469101df9a50544b6873aa5509a12f1f93f1cb5e3be3990d344b3'>Support</a> </li> <li><a href='#5458f54ffe10aa484eee915280d2afebf0fd21f6048e24042ee964cd2c202efb'>Errata</a> </li> <li><a href='#5eb6cf647d2c5d14a044e2d103dcef4cf0cdc872434c374debc1043092bc4746'>Discussion</a> </li> </ul> </li> <li><a href="/page/Showcase">Showcase</a></li> <li><a href="/page/Tcl+Tutorial+Lesson+0">Tutorial</a></li> <li><a href="/page/Articles">Articles</a></li> <li><a href="/page/Tcl+Playground">Playground</a></li> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'>&nbsp;Help<span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/page/Help'>Page Markup</a></li> <li><a rel='nofollow' href='/page/How+do+Wiki+Categories+work'>Wiki Categories</a></li> <li><a rel='nofollow' href='/page/Contents'>Topics</a></li> <li><a rel='nofollow' target='_blank' href='https://chiselapp.com/user/stevel/repository/nikit/ticket'>Report Problems</a></li> <li><a rel='nofollow' href='/privacy'>Privacy</a></li> <li><a rel='nofollow' href='/license'>License</a></li> </ul> </li> </ul> <ul class='nav navbar-nav navbar-right'> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_SMenu>User</span><span class='caret'></span></a> <ul class='dropdown-menu' id='ul_SMenu'> </ul> </li> </ul> <form class='navbar-form navbar-right' method='post' action='/search' id='searchform'> <input name='Q' type='text' class='form-control' placeholder='Search...'/> <input type="hidden" name="sites" value="wiki.tcl-lang.org"/> </form> </div> </div> </nav> <div class='container'> <div class='row'> <div class='col-xs-12'> <h2>BOOK The Tcl Programming Language</h2> </div> </div> <div class='row'> <div class='col-xs-12'> <p class='mkup_p'><i class='mkup_i'>The Tcl Programming Language</i> is a comprehensive guide to Tcl, covering Tcl 8.6. </p><p class='mkup_p'>See the <a rel='nofollow' class='mkup_a' href='https://www.magicsplat.com/ttpl/index.html'>official book page <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> for more information and a detailed Table of Contents.</p><p class='mkup_p'><img class='mkup_img' alt='' src='/image/TTPLImage' width='150' height='204'></p><p class='mkup_p'>The ebook version (PDF format) is available from <a rel='nofollow' class='mkup_a' href='https://gum.co/tclprog'>Gumroad <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>.</p> <p class='mkup_p'>The print version is available from Amazon in <a rel='nofollow' class='mkup_a' href='https://www.amazon.com/dp/154867964X'>USA/Canada <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> and their European sites including <a rel='nofollow' class='mkup_a' href='https://www.amazon.co.uk/dp/154867964X'>UK <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>, <a rel='nofollow' class='mkup_a' href='https://www.amazon.de/dp/154867964X'>Germany <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>, <a rel='nofollow' class='mkup_a' href='https://www.amazon.fr/dp/154867964X'>France <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>, <a rel='nofollow' class='mkup_a' href='https://www.amazon.es/dp/154867964X'>Spain <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> and <a rel='nofollow' class='mkup_a' href='https://www.amazon.it/dp/154867964X'>Italy <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>. <b class='mkup_b'>If you like the book, positive reviews on Amazon are appreciated.</b></p> <h2 id='be91940b79f469101df9a50544b6873aa5509a12f1f93f1cb5e3be3990d344b3' class='mkup_h1'>Support</h2><p class='mkup_p'>Please send any errors or other comments about the book to apnmbx-wits at yahoo. </p> <h2 id='5458f54ffe10aa484eee915280d2afebf0fd21f6048e24042ee964cd2c202efb' class='mkup_h1'>Errata</h2><p class='mkup_p'>Page 19, middle of page, (from Gregor E.)</p><pre class='mkup_pre'> C:\temp&gt;ftype TclApp=C:\Tcl\bin\tclsh.exe</pre><p class='mkup_p'>should be</p><pre class='mkup_pre'> C:\temp&gt;ftype TclApp=C:\Tcl\bin\tclsh.exe &quot;%1&quot; %*</pre><p class='mkup_p'>Page 61, bottom of page, (from Alex P.)</p><p class='mkup_p'><i class='mkup_i'>values proscribed by EIAS</i> should be <i class='mkup_i'>values prescribed by EIAS</i></p><p class='mkup_p'>Page 76, top of page, (from Alex P.). The word <i class='mkup_i'>the</i> is repeated. <i class='mkup_i'>... unless the the -nocase option is specified.</i> should be <i class='mkup_i'>... unless the -nocase option is specified</i>.</p><p class='mkup_p'>Page 83, Table 4.7 5th row, (from Alex P.)</p><p class='mkup_p'><i class='mkup_i'>This includes 1, false, no ...</i> should be <i class='mkup_i'>... includes 0, false ...</i></p><p class='mkup_p'>Page 97, bottom of page, (from Saurabh G.). In the code example,</p><pre class='mkup_pre'> regexp {(?ic)RE} STRING</pre><p class='mkup_p'>should be</p><pre class='mkup_pre'> regexp {(?in)RE} STRING</pre><p class='mkup_p'>Page 162, bottom of page, (from Gregor E.). The syntax description of <span class='mkup_tt'>dict for</span> should be</p><pre class='mkup_pre'> dict for {KEYVAR VALUEVAR} DICTIONARY SCRIPT</pre><p class='mkup_p'>Page 297, bottom of page, (from Alex P.). The condition <span class='mkup_tt'>if {$i &gt;= 4} ...</span> should be <span class='mkup_tt'>if {$i &gt;= 3}...</span>. </p><p class='mkup_p'>Page 298, top of page, (from Alex P.). <span class='mkup_tt'>if {$i == 2}...</span> should be <span class='mkup_tt'>if {$i == 1}...</span>. </p><p class='mkup_p'>Page 298, middle of page, (from Alex P.). <i class='mkup_i'>return code value 1 / return</i> should be <i class='mkup_i'>return code value 2 / return</i>.</p><p class='mkup_p'>Page 300, top of page, (from Alex P.). <i class='mkup_i'>...discussed is 2 or error...' should be </i>...discussed is 1 or error...''.</p><p class='mkup_p'>Page 308, top of page, (from Alex P.). <span class='mkup_tt'>close $chan</span> should be <span class='mkup_tt'>close $result</span>.</p><p class='mkup_p'>Page 312, middle of page, (from Alex P.). <span class='mkup_tt'>-errorstack ERRORSTACK?</span> should be <span class='mkup_tt'>?-errorstack ERRORSTACK?</span>.</p><p class='mkup_p'>Page 320, bottom of page, (from Alex P.). <span class='mkup_tt'>namespace syntax ?NAMESPACE?</span> should be <span class='mkup_tt'>namespace children ?NAMESPACE?</span></p><p class='mkup_p'>Page 355, in script towards bottom of page, (from Alex P.), variable <span class='mkup_tt'>geom_term_geom</span> should be <span class='mkup_tt'>geom_term</span>.</p><p class='mkup_p'>Page 355, bottom of page, (from Alex P.), <i class='mkup_i'>either seq_arith or seq_geom</i> should be <i class='mkup_i'>either seq::arith_term or seq::geom_term</i>.</p><p class='mkup_p'>Page 362, in the script at the top of the page, <span class='mkup_tt'>platform::identity</span> should be <span class='mkup_tt'>platform::identify</span>.</p><p class='mkup_p'>Page 362, in the script at the top of the page, <span class='mkup_tt'>package ifneeded binpkg...</span> should be <span class='mkup_tt'>package ifneeded $package_name...</span>.</p><p class='mkup_p'>Page 365, middle of page, (from Alex P.). <i class='mkup_i'>The experience gained from these system ...</i> should be <i class='mkup_i'>The experience gained from these systems ...</i></p><p class='mkup_p'>Page 378, last line of page, (from Alex P.). The line <i class='mkup_i'>This facility is available to all savings accounts but only to selected checking accounts.</i> should be <i class='mkup_i'>This facility is available to all checking accounts but only to selected savings accounts.</i></p><p class='mkup_p'>Page 393, top of page, (from Alex P.). <i class='mkup_i'>... the command self class command returns ...</i> should be <i class='mkup_i'>the self class command ...</i>.</p><p class='mkup_p'>Page 416, top of page, (from Alex P.). <i class='mkup_i'>The &lt;&lt; redirection works...</i> should be <i class='mkup_i'>The &gt;&gt; redirection works...</i>.</p><p class='mkup_p'>Page 601, top of page, (from Alex P.). The syntax block for <span class='mkup_tt'>foreach</span>,</p><pre class='mkup_pre'> 1) ''allrows'' should be instead of ''foreach'' (in RESULTSET, STATEMENT, DBCONN lines) 2) STATEMENT line should be ended as ''... ?--? VAR ?DICT? SCRIPT'' 3) DBCONN line should be ended as ''... ?--? VAR SQL ?DICT? SCRIPT''</pre><p class='mkup_p'>Page 451, 1st, 2nd and 3rd procs might be more bureaucratic according to the previous <i class='mkup_i'>namespace eval ::bureaucrat ...</i>, i.e.</p><pre class='mkup_pre'> proc ::bureacrat ...</pre><p class='mkup_p'>might be</p><pre class='mkup_pre'> proc ::bureaucrat ...</pre><p class='mkup_p'>Page 450, middle of page, the sentence <i class='mkup_i'>While a TclOO based implementation ...</i> looks somewhat incomplete. Perhaps it might be: <i class='mkup_i'>In contrast to a TclOO based implementation ...</i> or <i class='mkup_i'>While a TclOO based implementation <a class='mkup_a mkup_known' href='/page/%2E%2E%2E'>...</a> provides an implicit per-channel context, a namespace based one does not maintain ...</i></p><h2 id='5eb6cf647d2c5d14a044e2d103dcef4cf0cdc872434c374debc1043092bc4746' class='mkup_h1'>Discussion</h2><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/JJM'>JJM</a> - 2017-07-25 - Got the book in the mail, looks really great. Nice job.</p><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/arjen'>arjen</a> - 2017-07-06 19:35:22</b></p><p class='mkup_p'>Congratulations! It is a welcome addition to the Tcl library and a voluminous one at that :)</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/bll'>bll</a> 2017-7-6 Looks very comprehensive. Looking forward to reading it.</p> <p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ALX'>ALX</a> 2017-07-09 17:45 Year! First! :-) &quot;Well, thanks for your prompt purchase! You are the very first buyer of my book! /Ashok&quot;</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/RLH'>RLH</a>: Will there be a book/ebook bundle? <a class='mkup_a mkup_known' href='/page/APN'>APN</a> No bundle because of the different distribution channels. But you might be able to make use of the discounted price as noted above. <a class='mkup_a mkup_known' href='/page/RLH'>RLH</a> Got them both. Reading through the book now. :)</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/MHo'>MHo</a> This book is simply <i class='mkup_i'>overwhelming</i>!</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/JOB'>JOB</a> - 2017-11-14 22:15:55</b></p><p class='mkup_p'>Congratulations as well! I quickly went through the TOC which looks really promising. Good to see that all those extensions and functionality recently added to the core like coroutines, TclOO, threads, database connectivity, etc. are all covered by the book. <a class='mkup_a mkup_known' href='/page/APN'>APN</a> Thanks, and that was indeed one of the primary motivations behind writing the book.</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/SYStems'>SYStems</a> did anyone buy the ebook via gumroad, I googled gumroad and the reviews are really bad. </p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> When you say reviews, I presume you mean Gumroad and not the book :-) I'm surprised you saw so many negative reviews of gumroad because I chose it based on the positive reviews I'd seen. (Also because they take care of EU VAT without my having to individually file.) I think most negative reviews of gumroad are from the seller's perspective (which would be me), not the buyer's. Personally, I have had no issues with selling through them. About a hundred e-book copies have downloaded so far and have not heard of any complaints from buyers.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/SYStems'>SYStems</a> yes 100% I meant gumroad, not the book :) </p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/DPG'>DPG</a> This book is great! I got the physical version because I'm just physical like that ;) This book has a good Index, which is important to physical book people. <a class='mkup_a mkup_known' href='/page/APN'>APN</a> Thanks, appreciated. However, such comments on the book's Amazon page would be appreciated even more, hint, hint :-) <a class='mkup_a mkup_known' href='/page/DPG'>DPG</a> Done! <a class='mkup_a mkup_known' href='/page/APN'>APN</a> Great! Thank you.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/SYStems'>SYStems</a> Can you please make available an epub version of the ebook. <a class='mkup_a mkup_known' href='/page/APN'>APN</a> Unfortunately not. I did try producing both epub and mobi formats originally but did not find the results acceptable the way tables and figures were displayed. It just leaves a bad impression about the book.</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/aplsimple'>aplsimple</a> - 2018-09-20 04:35:56</b></p><p class='mkup_p'>Dear Ashok,</p><p class='mkup_p'>I've found some tiny issues in your book. Below they are listed, an original text is quoted, a comment begins with &quot;-&quot;.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> Thanks for the list Alex. I have integrated most of your corrections into the Errata above. The remaining are below with my comments.</p><p class='mkup_p'>4. There are no outputs of some commands:</p><p class='mkup_p'>Page 373: - should be:</p><pre class='mkup_pre'> % oo::class create CheckingAccount { ... ==&gt; ::SavingsAccount</pre><p class='mkup_p'>Page 388: - should be:</p><pre class='mkup_pre'> % oo::class create ClassWithOneArg { ... ==&gt; ::ClassWithOneArg % oo::class create ClassWithNoArgs { ... ==&gt; ::ClassWithNoArgs (there are other cases of this)</pre><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> This is by design. Commands that are typed at the interactive prompt, and scripts as they might be stored in a file. The former is shown with a % prompt and the output of every command is printed for pedagogic purposes. For the latter, no % prompt is shown and only the output of the last command is shown. Intermediate output is not shown as it only adds to the clutter and is of limited interest. I've mentioned this difference in Section 1.3.1 (Conventions) but of course it's probably not fair of me to expect readers to have read that :-)</p><p class='mkup_p'>5. Page 379 (bottom):</p><p class='mkup_p'>There is no definition of BillPay class and it is not good because the example would not work in CLI. You might modify it as:</p><pre class='mkup_pre'> % oo::class create BillPay {} ;# Empty class for demo only ==&gt; ::BillPay % oo::define CheckingAccount {mixin BillPay EFT} % info class mixin CheckingAccount ==&gt; ::BillPay ::EFT</pre><p class='mkup_p'>I mention in the text, &quot;<b class='mkup_b'>if</b> you had a BillPay class defined&quot;, but your way is probably better.</p><p class='mkup_p'>6. The problem is that you omit the % tclsh's prompt in many examples throughout the book.</p><p class='mkup_p'>It's no problem when there is no output of command or the output is shown in the same line.</p><p class='mkup_p'>However, if there is the &quot;==&gt;&quot; output then the corresponding input should be marked (and really very often marked!) with &quot;%&quot;.</p><p class='mkup_p'>Otherwise a reader may be perplexed with what command ouputs this. It's also a question of consistency.</p><p class='mkup_p'>See e.g. sections 14.4.3, 14.6, 14.7, 14.9.1, 14.10, 14.11.3.3.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> See my explanation above for interactive vs. script distinction.</p><p class='mkup_p'>Regards, Alex Plotnikov</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> Thanks again!</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/aplsimple'>aplsimple</a> - 2018-09-20 12:48:56</b></p><p class='mkup_p'>Let me repost myself from <a rel='nofollow' class='mkup_a' href='https://groups.google.com/forum/#!forum/comp.lang.tcl'>https://groups.google.com/forum/#!forum/comp.lang.tcl <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'><span class='mkup_tt'>I'd got here in Voronezh obl., Russia, your book (printed in USA, Middletown, DE, 25 July 2018) in a month after request. Continuously fascinated by the book, esp. while resolving a question from time to time.</span></p><p class='mkup_p'>It takes some comments. The book was got from Amazon indirectly, i.e. at first it had been sent to Europe and only after that to Russia. There was no direct Amazon delivery to Russia maybe because of those sanctions, you know:) The delivery had taken <span class='mkup_tt'>ONE MONTH</span>, money about 2500 roubles (~ $40).</p><p class='mkup_p'>The book is amazing. Bible of Tcl indeed and Ashok P. Nadkarni being Tcl apostle. Do not pay much attention to its typos and tiny drawbacks. They are nothing compared with its goods. Moreover, methinks, Ashok would be grateful all of you guys for pointing at the drawbacks whatever they are:)</p><p class='mkup_p'>Hopefully this info would help someone.</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/aplsimple'>aplsimple</a> - 2018-09-23 14:48:07</b></p><p class='mkup_p'>Here</p><p class='mkup_p'><a rel='nofollow' class='mkup_a' href='https://aplsimple.github.io/en/tcl/booksum'>https://aplsimple.github.io/en/tcl/booksum <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'>is the utility for executing the code samples of &quot;The Tcl Programming Language&quot; book. You can view also a text ch14_tcloo.txt containing the output of utility.</p><p class='mkup_p'>All you need to use the utility is</p><pre class='mkup_pre'> 1) insert the code samples into its &quot;bundle&quot; variable, with your comments and debugging stops 2) run the utility from console or your editor (e.g. from Geany IDE with Run command: tclsh &quot;./%f&quot;).</pre><p class='mkup_p'>The utility's special feature is that you need not delete &quot;%&quot; prompts of the book's samples after copy-pasting them. You can also add comments, your own code, debugs and save all into separate chNN*.tcl files which makes the utility rather useful while reading the book's chapters.</p><p class='mkup_p'>See details in <a rel='nofollow' class='mkup_a' href='https://aplsimple.github.io/files/booksum.rar'>samples/OOtcl_book.tcl <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> that contains the samples of draft chapter 14 &quot;Object Oriented Programming&quot; available here:</p><p class='mkup_p'><a rel='nofollow' class='mkup_a' href='http://www.magicsplat.com/articles/oo.html'>http://www.magicsplat.com/articles/oo.html <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'>The samples are numerated according to the draft which is not the same as the book. You can clone the utility for other chapters of the book.</p><p class='mkup_p'>It would be nice to include other samples into <a rel='nofollow' class='mkup_a' href='https://aplsimple.github.io/files/booksum.rar'>booksum.rar <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> , however there is much sense in purchasing the book and personal playing with its gigantic store of samples.</p><p class='mkup_p'>This utility allows to have <span class='mkup_tt'>a convenient summary</span> of read chapter after those code plays. The reading of your own summaries is often the best mode to refresh your knowledge.</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/aplsimple'>aplsimple</a> - 2018-09-24 16:36:08</b></p><p class='mkup_p'>Updated (described above)</p><p class='mkup_p'><a rel='nofollow' class='mkup_a' href='https://aplsimple.github.io/en/tcl/booksum'>https://aplsimple.github.io/en/tcl/booksum <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'>would allow to paste a Tcl sample that hasn't the proper indentation. The corresponding updates were borrowed from</p><p class='mkup_p'><a rel='nofollow' class='mkup_a' href='https://wiki.tcl-lang.org/15731'>https://wiki.tcl-lang.org/15731 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'>The correction of code indentation is important when you copy-paste from a pdf file rather than a html page. The pdf viewers (at least those I've tested) remove the indentation at copying a code snippet. Some of viewers could even distort the resulting code because of %, &rarr;, &Oslash;, page titles etc.</p><p class='mkup_p'>Adobe pdf reader (in Windows) and Okular document viewer (in Linux) both allow to copy the code snippets of &quot;The Tcl Programming Language&quot; without distortions.</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ET'>ET</a> - 2021-9-13 Wonderful book, and in pdf, couldn't be a better resource. Will there be any new editions? I do think I found one error, on page 580</p><p class='mkup_p'>tsv::set shared_data <b class='mkup_b'>url</b> {} &rarr; (empty)</p><p class='mkup_p'>I believe that should be the shared variable <b class='mkup_b'>urls</b>, url is a regular variable lower down.</p><hr><div class='mkup_centered'><table class='mkup_categories'><tr><td class='mkup_td'><a class='mkup_a' href='/page/Category+Book'>Category Book</a></td></tr></table></div> </div> </div> <div class='row'> <div class='col-xs-12'> <div class='Footer'>Updated 2021-09-13 23:26:02</div> </div> </div> </div> <!-- jQuery library --> <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.0/js/jquery.tablesorter.combined.js'></script> <!-- Latest compiled JavaScript --> <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script> <script type='text/javascript' src='/scripts/nikit.js'></script> <script type='text/javascript' src='/scripts/sh_main.js'></script> <script type='text/javascript' src='/scripts/sh_tcl.js'></script> <script type='text/javascript' src='/scripts/sh_c.js'></script> <script type='text/javascript' src='/scripts/sh_cpp.js'></script> <!-- <script src='https://www.google.com/recaptcha/api.js'></script> --> <script src='https://hcaptcha.com/1/api.js'></script> <script>var clipboard = new ClipboardJS('.copybtn', { text: function(trigger) { return document.querySelector(trigger.getAttribute('data-clipboard-target')).textContent + '\n'; } }); sort_tables(); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10