CINXE.COM
Freewrap
<!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>Freewrap</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='#'> Tcler'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/Freewrap?A=1'>Comment</a></li> <li><a rel='nofollow' hidden='true' href='/_edit/Freewrap'>Edit</a></li> <li><a rel='nofollow' href='/_upload/Freewrap'>Upload</a></li> <li><a rel='nofollow' href='/ref/Freewrap'>References</a></li> <li><a rel='nofollow' href='/history/Freewrap'>History</a></li> <li><hr></li> <li><a href='#f89ea27036ac1d3174e2160a4d291d006ad6f85d466726ba04760beec0940c24'> Versions</a> </li> <li><a href='#bef0ff5cac9424302085f855e37b4da22cf0770ca8e618c313ea1686d9f4ff74'> Notes on versions</a> </li> <li><a href='#3521a7d685dc9d86c1c4fa924448479d872eabfc6d1c128ef2fe0b6287438b1c'> Notes</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/Freewrap'>References</a></li> <li><a rel='nofollow' href='/history/Freewrap'>History</a></li> <li><hr></li> <li><a href='#f89ea27036ac1d3174e2160a4d291d006ad6f85d466726ba04760beec0940c24'> Versions</a> </li> <li><a href='#bef0ff5cac9424302085f855e37b4da22cf0770ca8e618c313ea1686d9f4ff74'> Notes on versions</a> </li> <li><a href='#3521a7d685dc9d86c1c4fa924448479d872eabfc6d1c128ef2fe0b6287438b1c'> Notes</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='#'> 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>Freewrap</h2> </div> </div> <div class='row'> <div class='col-xs-12'> <p class='mkup_p'>by <a class='mkup_a mkup_known' href='/page/Dennis+LaBelle'>Dennis LaBelle</a></p><p class='mkup_p'>homepage at <a rel='nofollow' class='mkup_a' href='http://freewrap.sourceforge.net/'>http://freewrap.sourceforge.net/ <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'>The freewrap program turns Tcl/Tk scripts into single-file binary executable programs. There are various forms of this application - from wrapping <a class='mkup_a mkup_known' href='/page/pure%2DTcl'>pure-tcl</a> scripts to wrapping <a class='mkup_a mkup_known' href='/page/Tk'>tk</a> to wrapping even tk + <a class='mkup_a mkup_known' href='/page/extension'>extension</a>s.</p><p class='mkup_p'>The pure Tcl version -- freewrapTCLSH -- generates an executable that's typically just over a quarter of a megabyte.</p><p class='mkup_p'>FreeWrap can also be used as a single-file wish or tclsh.</p><p class='mkup_p'>What's special to freeWrap? One benefit in older versions was that freeWrap included <a class='mkup_a mkup_known' href='/page/BLT'>BLT</a>. Also, it encrypts the wrapped files (ZIP 2.0 style file encryption). And it comes with a complete implementation of zip (most functionality of the Info-ZIP library is implemented).</p><p class='mkup_p'>FreeWrap version 7.0 and later use TCL's own virtual file system capability.</p><hr class='mkup_hr'><p class='mkup_p'>See also:</p><UL class='mkup_UL'><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/Deploying+With+Freewrap'>Deploying With Freewrap</a></li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/tG%C2%B2'>tG²</a> made by <a class='mkup_a mkup_known' href='/page/SeS'>SeS</a>, freeWrap (for Win) is integrated into this GUI builder. One can wrap the created GUI with the push of a few buttons...</li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/tclexecomp'>tclexecomp</a></li></UL><p class='mkup_p'>For other wrapping solutions, see:</p><UL class='mkup_UL'><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/tbcload'>tbcload</a></li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/FreeDelivery'>Freedelivery</a></li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/Starpack'>Starpack</a>s</li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/StarPack+helper'>StarPack helper</a> made by <a class='mkup_a mkup_known' href='/page/JR'>JR</a></li><li class='mkup_li'><a class='mkup_a mkup_known' href='/page/mktclapp'>mktclapp</a></li></UL><p class='mkup_p'>... and so on. </p><hr class='mkup_hr'><h3 id='f89ea27036ac1d3174e2160a4d291d006ad6f85d466726ba04760beec0940c24' class='mkup_h2'>Versions</h3><p class='mkup_p'>Versions include (for a complete list, see the <a rel='nofollow' class='mkup_a' href='https://freewrap.dengensys.com/revision-history/'>revision history <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>):</p><table class='mkup_data'><tr class='mkup_tr'><th class='mkup_th'>Version</th><th class='mkup_th'>release date</th><th class='mkup_th'>Tcl version basis</th><th class='mkup_th'>remarks</th></tr><tr class='mkup_trodd'><td class='mkup_td'>7.0</td><td class='mkup_td'>April 4, 2025</td><td class='mkup_td'>9.0.1</td><td class='mkup_td'>Uses TCL's virtual file system</td></tr><tr class='mkup_treven'><td class='mkup_td'>6.76</td><td class='mkup_td'>March 2, 2025</td><td class='mkup_td'>8.6.16</td><td class='mkup_td'></td></tr><tr class='mkup_trodd'><td class='mkup_td'>6.75</td><td class='mkup_td'>January 5, 2023</td><td class='mkup_td'>8.6.13</td><td class='mkup_td'></td></tr><tr class='mkup_treven'><td class='mkup_td'>6.70</td><td class='mkup_td'>February 7, 2019</td><td class='mkup_td'>8.6.9</td><td class='mkup_td'>now uses /zvfs mount point</td></tr><tr class='mkup_trodd'><td class='mkup_td'>6.63</td><td class='mkup_td'>April 19, 2014</td><td class='mkup_td'>8.6.1</td><td class='mkup_td'></td></tr><tr class='mkup_treven'><td class='mkup_td'>6.60</td><td class='mkup_td'>April 25, 2013</td><td class='mkup_td'>8.6.0</td><td class='mkup_td'>no BLT included anymore</td></tr><tr class='mkup_trodd'><td class='mkup_td'>6.5</td><td class='mkup_td'>January 12, 2011</td><td class='mkup_td'>8.5.9</td><td class='mkup_td'>BLT included again</td></tr><tr class='mkup_treven'><td class='mkup_td'>6.42</td><td class='mkup_td'>January 25, 2009</td><td class='mkup_td'>8.5.6</td><td class='mkup_td'></td></tr><tr class='mkup_trodd'><td class='mkup_td'>6.4</td><td class='mkup_td'>January 28, 2008</td><td class='mkup_td'>8.5.0</td><td class='mkup_td'>no BLT included anymore</td></tr><tr class='mkup_treven'><td class='mkup_td'>6.0</td><td class='mkup_td'>January 2, 2005</td><td class='mkup_td'>8.4.8</td><td class='mkup_td'></td></tr></table> <hr class='mkup_hr'><h3 id='bef0ff5cac9424302085f855e37b4da22cf0770ca8e618c313ea1686d9f4ff74' class='mkup_h2'>Notes on versions</h3><p class='mkup_p'>Version <b class='mkup_b'>6.70</b> ...</p><p class='mkup_p'>- Happily, this version added new icon sizes (though sadly seems unable to put in the 256x256 variant via the -i option)</p><p class='mkup_p'>- One change that can have existing-script breaking implications is: wrapped files now have a system mount point of "/zvfs".</p><hr class='mkup_hr'><h3 id='3521a7d685dc9d86c1c4fa924448479d872eabfc6d1c128ef2fe0b6287438b1c' class='mkup_h2'>Notes</h3><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/mg'>MG</a> I've been using Freewrap since before I knew Starkits existed (and possibly since before they did exist?). I've read a lot of very long pages on how to use a Starkit to make an executable of a Tcl script, which several files and utilities to download.. and then I just drag-and-drop my Tcl script onto Freewrap and my executable is made. That's why I've kept using it. Though, lately (I think since I downloaded freeWrap 6), I've found that if I edit the icons or version info of my freeWrap'd executable with Resource Hacker, as I've always done, it no longer works, which is a downside that would make me consider switching to Starkits now.'</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/EKB'>EKB</a> The problem came in version 6.0 of Freewrap from using UPX to compress the executable. There is now a non-UPX version of freewrap (ver. 6.1). <i class='mkup_i'>(The following note by <a class='mkup_a mkup_known' href='/page/A%2FAK'>A/AK</a> was rearranged w/permission to remove <a class='mkup_a mkup_known' href='/page/EKB'>EKB</a>'s questions.)</i></p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/A%2FAK'>A/AK</a> If the executable's tail is a zip archive (like in freewrap), the archive's table of contents must be adjusted when the preamable's size changes.</p><p class='mkup_p'>The standard InfoZIP's <i class='mkup_i'>zip</i> program can do it when the <i class='mkup_i'>-A</i> option is given. Thus, If you've downloaded freewrap 6.1 (no UPX), you may edit its resources, then compress the executable with upx, then use <i class='mkup_i'>zip -A</i> to make it usable again. Alternately, if some other version of freewrap will be compressed with UPX again, you may decompress it with upx -d, edit its resources, then compress with upx, then adjust with zip -A. Either way, the steps are easy:</p><pre class='mkup_pre'> upx freewrap.exe / upx -d freewrap.exe zip -A freewrap.exe</pre><p class='mkup_p'>No more need to wait for the next version of freewrap. No more feature requests to <a class='mkup_a mkup_known' href='/page/Dennis+LaBelle'>Dennis LaBelle</a> causing him to switch between using and not using UPX compression with each subsequent version.</p><p class='mkup_p'>Of course, if you <i class='mkup_i'>want</i> to recompile freewrap, uncommenting the line with UPX in its makefile will make it compressed from the very start, and commenting the line will make it uncompressed. There is no need in <i class='mkup_i'>zip -A</i> until you want to turn compressed freewrap into uncompressed and back again <i class='mkup_i'>without recompiling it</i>.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/SEH'>SEH</a> 20060103 -- I've been in touch with the author of the nifty <a class='mkup_a mkup_known' href='/page/XHTML%2DEditor'>XHTML-Editor</a> package about whether he'd be willing to make the code available; he said he'd like to, but he lost it. It's a freewrapped program. Is there a simple way to unwrap a package and thus recover the code?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/RH'>RH</a> 2006-01-04 You can just unzip the executable. In pre freewrap 6.xx there was a encryption option. If he used it then unzipping gives you the encrypted files. For decryption have a look at the sources of freewrap.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/SEH'>SEH</a> 20060104 -- Neither WinZip nor gunzip will recognize the executable as a file that can be unzipped. Can you provide more explicit instructions for unzipping an executable?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/LES'>LES</a>: it is compressed with <a class='mkup_a mkup_known' href='/page/upx'>upx</a>. But after decompression, zip utilities still refuse to recognize it.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/Dennis+LaBelle'>Dennis LaBelle</a>: 2006-01-04 I extracted the source code from the <a class='mkup_a mkup_known' href='/page/XHTML%2DEditor'>XHTML-Editor</a> application and sent it to the author today. This application was wrapped with freeWrap 4.x. I have a program (which I wrote) that can do such extractions.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/wdb'>wdb</a>: 2006-04-03 The sources of the XHTML editor "MTE" are available [<a rel='nofollow' class='mkup_a' href='http://wolf-dieter-busch.de/html/res/Heimatseite/download/MTEsource.zip'>L1 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>] from my HP [<a rel='nofollow' class='mkup_a' href='http://wolf-dieter-busch.de/html/Software/XHTMLEditor.htm'>L2 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]. Thank you, <a class='mkup_a mkup_known' href='/page/Dennis+LaBelle'>Dennis Labelle</a>! (Indeed, I had made it available as soon as I received Dennis' message. Sorry for the delay of my announcement. I did not know of this wiki page.)</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/DB'>DB</a>: 2006-01-26 -- freeWrap 6.2 has been ported to Darwin and Mac OS X. The binaries are available at [<a rel='nofollow' class='mkup_a' href='http://www.nscl.msu.edu/~bazin/freewrap'>L3 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]. An additional version called freewrapAQUA wraps Tcl/Tk applications with the Aqua interface of OS X.</p><p class='mkup_p'><a class='mkup_a mkup_unknown' href='/_new?newpagename=Synic'>Synic</a>: 2006-09-05 -- Unfortunately, while the freeWrap 6.2 binaries from that URL do run on OS X they only produce Mac OS 9 compatible TCL apps. Attempting to run apps causes the OS 9 compatibility mode to start in order to run it (which isn't helpful if the disk has never had OS 9 installed). </p><hr class='mkup_hr'><p class='mkup_p'>PCO - 18 december 2010 - Because nobody seams to maintain this tool, I finally have ported again freewrap 6.2 onto Mac OS X Tiger / Intel. My release is based on the native Aqua interface (no X11) and permits to build integrated Mac applications (have a look on mine : <a rel='nofollow' class='mkup_a' href='http://r.fifi.free.fr/BagPipe'>BagPipe <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>).</p><p class='mkup_p'>You can find it here : <a rel='nofollow' class='mkup_a' href='http://r.fifi.free.fr/BagPipe/compteur.php3?soft=freewrap6.2'>freewrap6.2 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>.</p><p class='mkup_p'>At the same time, I have finalized the snack2.2.10 port onto Mac OS X Intel too, fixing a severe issue : input functions weren't implemented at all. As for the input and output gains setting.</p><p class='mkup_p'>You can find the full function snack 2.2.10 library here : <a rel='nofollow' class='mkup_a' href='http://r.fifi.free.fr/BagPipe/compteur.php3?soft=Snack2.2'>Snack 2.2.10 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> and the source code here : <a rel='nofollow' class='mkup_a' href='http://r.fifi.free.fr/BagPipe/compteur.php3?soft=Snack2.2_src'>Snack 2.2.10_src <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_unknown' href='/_new?newpagename=Daniel'>Daniel</a> Not sure from the above--can you, or can you not, put a larger set of icons in a freewrapped Windows exe, and if so, exactly how? Only small icons can be inserted via icon editors like Microangelo, and the "-i" option only replaces those specific sizes.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/mg'>MG</a> I believe (though someone who knows better than me can confirm/correct, hopefully) that you can only put in the icons which were there originally, at least using things like Resource Hacker or standard icon editors. Whether there are other programs which can add in new icons, I don't know, but I'm not aware of any - I think you'd need a copy of freeWrap that was compiled with all the icons you want.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/slebetman'>slebetman</a> Correct. In which case, Dennis, can you please release newer versions of freewrap with a larger set of supported icons compiled in. I know I can compile freewrap myself from sources to have exactly the icon set I need but I don't have access to MSVC.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/EKB'>EKB</a> I use Heaventool's Resource Tuner [<a rel='nofollow' class='mkup_a' href='http://www.restuner.com/'>L4 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]. It costs about $40 and has a nice interface.</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_unknown' href='/_new?newpagename=meinapril'>meinapril</a> I like to get rid of the heavy load (1.4 MB) of tzdata inside. I know, it is Tcl. But not many need it. Deleting...? ->The zip file is encrypted. Build your own ...? -> Like build your own car?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/aricb'>aricb</a> For future reference, deleting the contents of the page in order to ask a question is considered bad manners. I can't specifically answer your question, but if you don't get answers here, try asking at <a class='mkup_a mkup_known' href='/page/Ask%2C+and+it+shall+be+given+%23+8'>Ask, and it shall be given # 8</a>.</p><hr class='mkup_hr'><p class='mkup_p'>One other note: I experienced problems with freeWrap in case one tries to execute it from a USB-flash drive connected via a USB-hub (2.0), instead, inserting and using the USB-drive via a USB-port connected to the motherboard of the PC or laptop should solve this problem (it did in my case...)</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_unknown' href='/_new?newpagename=LK'>LK</a> - 2012-12-18 00:44:54</b></p><p class='mkup_p'>I am using freewrapPLUS 6.51 on Windows to create a single executable with a -i myicons.ico option. However, only small icon in detail view of the file folder views is replaced with my icon, all situation requiring a larger icon still uses the default freewrap icon, even though all possible sizes and depths of the icon are included in myicons.ico. Several icon/resource editing programs such as IcoFX or Resource Tuner all show that the wrapped application contains, and only contains 4 size/depth variations of my icon (the 4 must-have as specified in the freewrap documentation); in particular, the executable does NOT contain any variation of the default freewrap icon. So how does the stand alone executable still display the default freewrap icon?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/APN'>APN</a> Say hello to the Windows Explorer icon cache :-) You may see if [<a rel='nofollow' class='mkup_a' href='http://iconfactory.com/home/show/1530'>L5 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>] or [<a rel='nofollow' class='mkup_a' href='http://www.winability.com/repair-windows-desktop-icon-cache/'>L6 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>] help.</p><hr><div class='mkup_centered'><table class='mkup_categories'><tr><td class='mkup_td'><a class='mkup_a' href='/page/Category+Application'>Category Application</a></td><td class='mkup_td'><a class='mkup_a' href='/page/Category+Deployment'>Category Deployment</a></td><td class='mkup_td'><a class='mkup_a' href='/page/Category+Dev%2E+Tools'>Category Dev. Tools</a></td><td class='mkup_td'><a class='mkup_a' href='/page/Category+Standalone+Executables'>Category Standalone Executables</a></td></tr></table></div> </div> </div> <div class='row'> <div class='col-xs-12'> <div class='Footer'>Updated 2025-04-04 21:18: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>