[
  {
    "path": ".gitignore",
    "content": "tmp_libcurl\ncurl.zip\nthird-party\ntmp_url"
  },
  {
    "path": "README.md",
    "content": "Auto download & compile libcurl\n-----------\nThis batch script will automatically download the latest libcurl source code and build it using Visual Studio compiler.\n\nSupported Visual Studio are:\n*  Visual C++ 6 (require Windows Server 2003 Platform SDK released in February 2003)\n*  Visual Studio 2005\n*  Visual Studio 2008\n*  Visual Studio 2010\n*  Visual Studio 2012\n*  Visual Studio 2013 [![Build status](https://ci.appveyor.com/api/projects/status/1837jha0re1vbtw5?svg=true)](https://ci.appveyor.com/project/blackrosezy/build-libcurl-windows)\n*  Visual Studio 2015 [![Build status](https://ci.appveyor.com/api/projects/status/ykm8b06h3x7855eo?svg=true)](https://ci.appveyor.com/project/blackrosezy/build-libcurl-windows-unln0)\n\n\n*Note-1*: All versions of **Visual Studio Express are unsupported**.\n\n*Note-2*: This script is using third-party open source software\n* `bin/7-zip` http://www.7-zip.org/download.html\n* `bin/unxutils` http://sourceforge.net/projects/unxutils/\n* `bin/xidel` http://sourceforge.net/projects/videlibri/files/Xidel/\n\nUsage :\n\n    $ build.bat\n\nTo build using /MT rather than /MD:\n\n    $ build.bat -static \n\nOutput :\n\n```\nthird-party\n└───libcurl\n    ├───include\n    │   └───curl\n    │           curl.h\n    │           curlbuild.h\n    │           curlrules.h\n    │           curlver.h\n    │           easy.h\n    │           mprintf.h\n    │           multi.h\n    │           stdcheaders.h\n    │           typecheck-gcc.h\n    │\n    └───lib\n        ├───dll-debug-x64\n        │       libcurl_debug.dll\n        │       libcurl_debug.lib\n        │       libcurl_debug.pdb\n        │\n        ├───dll-debug-x86\n        │       libcurl_debug.dll\n        │       libcurl_debug.lib\n        │       libcurl_debug.pdb\n        │\n        ├───dll-release-x64\n        │       libcurl.dll\n        │       libcurl.lib\n        │       libcurl.pdb\n        │\n        ├───dll-release-x86\n        │       libcurl.dll\n        │       libcurl.lib\n        │       libcurl.pdb\n        │\n        ├───static-debug-x64\n        │       libcurl_a_debug.lib\n        │\n        ├───static-debug-x86\n        │       libcurl_a_debug.lib\n        │\n        ├───static-release-x64\n        │       libcurl_a.lib\n        │\n        └───static-release-x86\n                libcurl_a.lib\n```\n\n## FAQ\nIf you get message something like below, please re-run build.bat again.\n\n    **** Retrieving:http://curl.haxx.se/download.html ****\n    Downloading latest curl...\n    http://curl.haxx.seAn unhandled exception occurred at $004C7D39 :: Bad port number.\n\nLicense (build.bat)\n-----------\n\n    The MIT License (MIT)\n    \n    Copyright (c) 2014 Mohd Rozi\n    \n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n    \n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n    \n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n"
  },
  {
    "path": "bin/7-zip/license.txt",
    "content": "      7-Zip Command line version\n      ~~~~~~~~~~~~~~~~~~~~~~~~~~\n      License for use and distribution\n      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n      7-Zip Copyright (C) 1999-2010 Igor Pavlov.\n\n      7za.exe is distributed under the GNU LGPL license\n\n      Notes: \n        You can use 7-Zip on any computer, including a computer in a commercial \n        organization. You don't need to register or pay for 7-Zip.\n\n\n      GNU LGPL information\n      --------------------\n\n        This library is free software; you can redistribute it and/or\n        modify it under the terms of the GNU Lesser General Public\n        License as published by the Free Software Foundation; either\n        version 2.1 of the License, or (at your option) any later version.\n\n        This library is distributed in the hope that it will be useful,\n        but WITHOUT ANY WARRANTY; without even the implied warranty of\n        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n        Lesser General Public License for more details.\n\n        You can receive a copy of the GNU Lesser General Public License from \n        http://www.gnu.org/\n"
  },
  {
    "path": "bin/unxutils/StdDisclaimer.html",
    "content": "<html>\n\n<head>\n<meta name=\"GENERATOR\" content=\"Microsoft FrontPage 3.0\">\n<title>Disclaimer</title>\n</head>\n\n<body bgcolor=\"#FD8698\">\n\n<h2 align=\"center\">Disclaimer</h2>\n\n<p align=\"left\">THIS SOFTWARE IS PROVIDED &quot;AS IS&quot; AND ANY EXPRESSED OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE&nbsp; CONTRIBUTORS\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\nOF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)<br>\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\nTORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>\n\n<p><a href=\"mailto:syring@web.de\"><font face=\"Trebuchet MS\">Karl M. Syring</font></a></p>\n</body>\n</html>\n"
  },
  {
    "path": "bin/unxutils/UnxUtilsDist.html",
    "content": "<html>\n\n<head>\n<meta name=\"description\"\ncontent=\"Native Win32 ports of some GNU utilities\nlinux\nbison-1.28 (GNU yacc)\nbzip2\ndiffutils-2.7\nfileutils-3.16\nfindutils-4.1\nflex-2.5.4 (GNU lex)\ngawk-3.0.5 (GNU awk)\ngrep-2.4\ngsar110\ngzip-1.2.4\nless-340\nm4-1.4\nmake-3.78.1\npatch-2.4\nsed-2.05\nshellutils-1.9.4\ntar-1.12\ntextutils-1.22\nwget-1.6.0\nfsplit\nrecode-3.5\nncompress-2.4.2\nzsh\">\n<meta name=\"GENERATOR\" content=\"Microsoft FrontPage 3.0\">\n<meta name=\"keywords\" content=\"Win32,GNU,Unix,Linux,utilities\">\n<title>Native Win32 ports of some GNU utilities</title>\n</head>\n\n<body bgcolor=\"#E2E2EB\">\n\n<table border=\"0\" width=\"72%\">\n  <tr>\n    <td width=\"100%\"><table border=\"0\" width=\"100%\" bgcolor=\"#8080FF\">\n      <tr>\n        <td width=\"32%\"></td>\n        <td width=\"68%\"><big><big><font face=\"Verdana\">GNU utilities for Win32</font></big></big></td>\n      </tr>\n    </table>\n    <p align=\"left\"><font face=\"Verdana\"><br>\n    This are some ports of common <a href=\"http://www.fsf.org\">GNU</a> utilities to native\n    Win32. In this context, native means the executables do only depend on the Microsoft\n    C-runtime (msvcrt.dll) and not an emulation layer like that provided by <a\n    href=\"http://www.cygwin.com/\">Cygwin</a> tools.<br>\n    </font></p>\n    <p align=\"left\"><strong><font face=\"Verdana\">Download:</font></strong></p>\n    <blockquote>\n      <p align=\"left\"><font face=\"Verdana\">by http: <a href=\"UnxUtils.zip\">UnxUtils.zip</a><br>\n      latest updates (after 14-04-03):&nbsp; <a href=\"UnxUpdates.zip\">UnxUpdates.zip</a> </font></p>\n    </blockquote>\n    <p><strong><font face=\"Verdana\">Source code:</font></strong></p>\n    <blockquote>\n      <p align=\"left\"><font face=\"Verdana\">I have started an Open source project at <a\n      href=\"http://unxutils.sourceforge.net\">http://unxutils.sourceforge.net</a>. There is a\n      &nbsp; <a href=\"#cvs\">CVS</a> repository of all sources, even if the changes to the\n      original GNU code are trivial. The repository can be accessed via anonymous CVS with the\n      command<br>\n      </font><small><font face=\"Courier New\">cvs\n      -d:pserver:anonymous@cvs.UnxUtils.sourceforge.net:/cvsroot/unxutils login</font></small></p>\n    </blockquote>\n    <hr>\n    <p align=\"left\"><small><font face=\"Verdana\">The following program versions are covered:</font></small></p>\n    <blockquote>\n      <p align=\"left\"><font face=\"Verdana\"><small>bc-1.05<br>\n      bison-1.28<br>\n      bzip2-1.0.2<br>\n      diffutils-2.7<br>\n      fileutils-3.16<br>\n      findutils-4.1<br>\n      flex-2.5.4<br>\n      gawk-3.1.0<br>\n      grep-2.4.2<br>\n      gsar110<br>\n      gzip-1.2.4<br>\n      indent-2.2.9<br>\n      jwhois-2.4.1<br>\n      less-340<br>\n      m4-1.4<br>\n      make-3.78.1<br>\n      patch-2.5<br>\n      recode-3.6<br>\n      rman-3.0.7<br>\n      sed-3.02<br>\n      shellutils-1.9.4<br>\n      tar-1.12<br>\n      textutils-2.1</small><br>\n      <small>unrar-3.00<br>\n      wget-1.8.2<br>\n      which-2.4</small></font></p>\n    </blockquote>\n    <p align=\"left\"><small><font face=\"Verdana\">Standard behavior:</font></small></p>\n    <ul>\n      <li><p align=\"left\"><small><font face=\"Verdana\">forward as well as backward slashes in file\n        paths are accepted.</font></small></p>\n      </li>\n    </ul>\n    <p align=\"left\"><font face=\"Verdana\">What is new:</font></p>\n    <p align=\"left\"><font face=\"Verdana\"><br>\n    <small>&nbsp;&nbsp; <u>14-04-03</u></small></font></p>\n    <ul>\n      <li><p align=\"left\"><strong><font face=\"Verdana\" color=\"#E41B66\">New edition</font></strong></p>\n      </li>\n      <li><p align=\"left\"><small><font face=\"Verdana\">The programs are in use on all continents of\n        earth, including Antarctica. Still no users on Mars.</font></small></p>\n      </li>\n    </ul>\n    <p align=\"left\">&nbsp;</p>\n    <table border=\"1\" width=\"698\" height=\"2400\">\n      <tr>\n        <td width=\"1\" height=\"26\" bgcolor=\"#8080FF\"><h2 align=\"center\">Program</h2>\n        </td>\n        <td width=\"733\" height=\"26\" bgcolor=\"#8080FF\"><h2 align=\"center\">Notes</h2>\n        </td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">agrep.exe</td>\n        <td width=\"733\" height=\"19\">got it from here: <a href=\"http://www.tgries.de/agrep/\">http://www.tgries.de/agrep/</a></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">ansi2knr.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">basename.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">bison.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">bzip2.exe</td>\n        <td width=\"733\" height=\"19\">Julian Sewards <a href=\"http://sourceware.cygnus.com/bzip2/\">alternative\n        compressor</a></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">bunzip2.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">bzip2recover.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">cat.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">chgrp.exe</td>\n        <td width=\"733\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">chmod.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">chown.exe</td>\n        <td width=\"733\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">cksum.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">cmp.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">comm.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">compress.exe</td>\n        <td width=\"733\" height=\"19\">for (de)compressing .Z files; this is actually a program\n        called ncompress and was found on one of&nbsp; the <a\n        href=\"ftp://sunsite.unc.edu/pub/Linux/\">Linux mirrors</a></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">cp.exe</td>\n        <td width=\"733\" height=\"19\">works only on NT, does real hardlinks on NTFS</td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">csplit.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">cut.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">date.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">dd.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">df.exe</td>\n        <td width=\"733\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">diff.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">diff3.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"1\" height=\"19\">dirname.exe</td>\n        <td width=\"733\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">du.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">echo.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">egrep.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">env.exe</td>\n        <td width=\"476\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">expand.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">expr.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">factor.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">fgrep.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"38\">find.exe</td>\n        <td width=\"476\" height=\"38\"><ul>\n          <li>Example of command line under Cmd/Command shell:<br>\n            find -name *.txt -exec cat {} ;</li>\n        </ul>\n        </td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">flex.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">fmt.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">fold.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gawk.exe</td>\n        <td width=\"476\" height=\"19\">input files are opened in text mode</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">make.exe</td>\n        <td width=\"476\" height=\"19\">From v3.77 upwards, make searches for a sh.exe on the path. If\n        it does not find one, it switches to win32 make mode that is it uses intermediate batch\n        files for command processing.<br>\n        This is fine until your makefile tries to execute something like mkdir, which will invoke\n        the internal mkdir from cmd.exe or command.com. As the results may not be to your liking,\n        you may prefer to use the sh.exe provide here.</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">grep.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gsar.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gunzip.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gzip.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">head.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">id.exe</td>\n        <td width=\"476\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">install.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">join.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">less.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"7\">ln.exe</td>\n        <td width=\"476\" height=\"7\">works only on NT, does real hardlinks on NTFS</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"6\">logname.exe</td>\n        <td width=\"476\" height=\"6\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">ls.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">m4.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">md5sum.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">mkdir.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">mkfifo.exe</td>\n        <td width=\"476\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">mknod.exe</td>\n        <td width=\"476\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">mv.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">mvdir.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">nl.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">od.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">paste.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">patch.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">pathchk.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">pr.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">printenv.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">printf.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">ptx.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">recode.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">rm.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">rman.exe</td>\n        <td width=\"476\" height=\"19\">PolyglotMan by Thomas A. Phelps ( <a\n        href=\"ftp://ftp.cs.berkeley.edu/ucb/people/phelps/tcltk/rman.tar.Z\">source</a>)</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">rmdir.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sdiff.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sed.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">seq.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sleep.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sort.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sh.exe</td>\n        <td width=\"476\" height=\"19\">renamed zsh - this is no replacement for the Cygwin bash</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"17\">shar.exe</td>\n        <td width=\"476\" height=\"17\">only works with -T (text) option</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">split.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">stego.exe</td>\n        <td width=\"476\" height=\"19\"><em>stego -E encode.me -T words.txt<br>\n        </em>Encodes file encode.me as gibberish text using words from the words.txt file to\n        stdout. If the -T option is omitted, stego looks for a file called &quot;words&quot; in\n        the current directory. Of course, the -D option will decode the input file; remember to\n        redistribute words.txt together with the encoded file.<br>\n        The purpose of this program is to disguise binary files as a kind of text file or to drive\n        your coworkers mad.</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">su.exe</td>\n        <td width=\"476\" height=\"19\">dummy</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sum.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">sync.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">tac.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">tail.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"76\">tar.exe</td>\n        <td width=\"476\" height=\"76\"><ul>\n          <li>only forward slashes are accepted</li>\n          <li>the -z option (compression) does not work</li>\n          <li>no remote archives</li>\n          <li>works only on NT, does real hardlinks on NTFS</li>\n        </ul>\n        </td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">tee.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">test.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">touch.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">tr.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">uname.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">unexpand.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">uniq.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">unrar.exe</td>\n        <td width=\"476\" height=\"19\">This is unrar 3.00 beta 7, which seems to have been\n        &quot;free&quot;. Works good enough.</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">unshar.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">uudecode.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">uuencode.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">wc.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">wget.exe</td>\n        <td width=\"476\" height=\"19\">wget 1.8.2 builds out of the box with MS Visual C</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">which.exe</td>\n        <td width=\"476\" height=\"19\">does not search the current directory</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">whoami.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">xargs.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">yes.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">zcat.exe</td>\n        <td width=\"476\" height=\"19\"></td>\n      </tr>\n      <tr>\n        <td width=\"692\" height=\"19\" colspan=\"2\" bgcolor=\"#FF0000\"></td>\n      </tr>\n      <tr>\n        <td width=\"692\" height=\"19\" colspan=\"2\"><p align=\"center\"><strong><font face=\"Verdana\">Additional\n        programs</font></strong></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">pclip.exe</td>\n        <td width=\"476\" height=\"19\">put the Windows clipboard text to stdout</td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gclip.exe</td>\n        <td width=\"476\" height=\"19\">get&nbsp; the Windows clipboard text from stdin<br>\n        Example: run the text from the clipboard through sed and put the result back<br>\n        <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n        pclip | sed &quot;s/string1/string2/g&quot; | gclip</em></td>\n      </tr>\n      <tr>\n        <td width=\"216\" height=\"19\">gplay.exe</td>\n        <td width=\"476\" height=\"19\">My minimalist console multimedia player using <a\n        href=\"http://msdn.microsoft.com/directx\">DirectShow</a>. With<br>\n        <em>gplay filename | URL</em><br>\n        you should be able to play just everything, as long as Microsoft supports it.</td>\n      </tr>\n    </table>\n    </td>\n  </tr>\n</table>\n\n<h3><small><font face=\"Trebuchet MS\"><a href=\"md5sum\">md5 sums</a> </font></small></h3>\n\n<hr>\n\n<h3><small><font face=\"Trebuchet MS\">Links:</font></small></h3>\n\n<p><font face=\"Trebuchet MS\"><small><strong>The gcc compiler for Win32:</strong><br>\n&nbsp;&nbsp; <a\nhref=\"http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs-mingw32.html\">http://www.mingw.org</a></small><br>\n<strong><small>Digital Mars compiler:</small><br>\n</strong><small>&nbsp;&nbsp; <a href=\"http://www.digitalmars.com\">http://www.digitalmars.com</a><br>\n<a name=\"zsh\"></a><strong>A zsh shell for Win32:</strong><br>\n&nbsp;&nbsp; <a href=\"ftp://ftp.blarg.net/users/amol/zsh\">ftp://ftp.blarg.net/users/amol/zsh</a><br>\n<strong>The home of vim, has a Win32 version:</strong></font><br>\n</small><font face=\"Trebuchet MS\"><font size=\"2\">&nbsp;&nbsp; <a\nhref=\"&nbsp;&nbsp;%20http:/www.vim.org\">http://www.vim.org</a></font><small><br>\n<strong>An emacs for NT:</strong></font><br>\n</small><font face=\"Trebuchet MS\" size=\"2\">&nbsp;&nbsp; <a\nhref=\"http://www.gnu.org/software/emacs/windows/ntemacs.html\">http://www.gnu.org/software/emacs/windows/ntemacs.html</a></font><small><br>\n<a name=\"cvs\"></a><font face=\"Trebuchet MS\"><strong>The CVS version control system:</strong></font><br>\n</small><font face=\"Trebuchet MS\" size=\"2\">&nbsp;&nbsp; <a href=\"http://www.cvshome.org\">http://www.cvshome.org</a><br>\n&nbsp;&nbsp; <a href=\"http://www.cvshome.org\">http://www.cvsnt.org</a></font><br>\n<small><font face=\"Trebuchet MS\"><strong>A free IDE for the Win32 gcc:</strong></font><br>\n<font face=\"Verdana\">&nbsp; <a href=\"http://www.objectcentral.com\">VIDE</a></font></small></p>\n\n<p><small><font face=\"Trebuchet MS\">Jos Fonsecas site with related stuff: <br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://jrfonseca.dyndns.org/projects/gnu-win32\">http://jrfonseca.dyndns.org/projects/gnu-win32</a><br>\nHTML man pages for the GNU utilities: <br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.fsf.org/manual/manual.html\">http://www.fsf.org/manual/manual.html</a><br>\nAn Un*x shell scripting resource:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.shelldorado.com/\">http://www.shelldorado.com/</a><br>\nAnother source of unixish stuff: <br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://virtunix.itribe.net\">http://virtunix.itribe.net</a></font></small></p>\n\n<p><font face=\"Trebuchet MS\"><small>Useful free NT system utilities:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.sysinternals.com/\">http://www.sysinternals.com</a></small><br>\n<small>Some hints on cloning your system with dd:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a\nhref=\"http://www.rajeevnet.com/hacks_hints/os_clone/os_cloning.html\">http://www.rajeevnet.com/hacks_hints/os_clone/os_cloning.html</a></small><br>\n<small>Programs missing from this distribution, especially a command line registry editor.</small><br>\n<small>&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.dmst.aueb.gr/dds/sw/outwit\">http://www.dmst.aueb.gr/dds/sw/outwit</a></small><br>\n<br>\n<small>The GNU Privacy Guard<small>:</small><br>\n&nbsp;&nbsp;<font color=\"#FF0000\">&nbsp;&nbsp; <a href=\"http://www.gnupg.org\">http://www.gnupg.org</a></font></small><br>\n<small>zip and unzip from the Infozip distribution:</small><br>\n<small>&nbsp;&nbsp;<font color=\"#FF0000\">&nbsp;&nbsp; <a\nhref=\"http://www.info-zip.org/pub/infozip/\">http://www.info-zip.org/pub/infozip</a></font></small></font></p>\n\n<p><small><font face=\"Trebuchet MS\">An Un*x emulation on Win32:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.cygwin.com\">http://www.cygwin.com</a><br>\nAnother Un*x emulation on Win32:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http://www.research.att.com/sw/tools/uwin/\">http://www.research.att.com/sw/tools/uwin/</a><br>\nWindows Services for UNIX, integrates the Interix subsystem:<br>\n&nbsp;&nbsp;&nbsp;&nbsp; <a\nhref=\"http://www.microsoft.com/windows/sfu/productinfo/overview/default.asp\">http://www.microsoft.com/windows/sfu/productinfo/overview/default.asp</a></font></small></p>\n\n<hr>\n\n<p><!-- BEGIN WEBSIDESTORY CODE v1.2 - ALTERING THIS CODE WILL CAUSE TERMINATION OF ACCOUNT --><!-- COPYRIGHT 1996-1998 WEBSIDESTORY, INC. ALL RIGHT RESERVED --><script language=\"javascript\"><!--dt=(new Date()).getHours();sv = 10;ss=\"na\";sc=\"na\";ln=\"\";pl=\"\";rf=escape(document.referrer)+\"\";if((rf==\"undefined\")||(rf==\"\")){rf=\"bookmark\";};bn=navigator.appName;if(bn.substring(0,9)==\"Microsoft\"){bn=\"MSIE\";};bv=Math.round(parseFloat(navigator.appVersion)*100);if((bn==\"MSIE\")&&(parseInt(bv)==2)){bv=301;}; ja=\"na\";if(navigator.appName==\"Netscape\") { if(bv>400) ln=navigator.language;if(bv>300) for(var i=0;i<navigator.plugins.length;i++)pl +=navigator.plugins[i].name+\":\" };//--></script><script language=\"javascript1.1\"><!--sv=11;ja=(navigator.javaEnabled()==true)?\"y\":\"n\";//--></script><script\nlanguage=\"javascript1.2\"><!--sv=12;ss=screen.width+\"*\"+screen.height;sc=(bn==\"MSIE\")?screen.colorDepth:screen.pixelDepth;if(sc==\"undefined\"){sc=\"na\";};//--></script><script language=\"javascript1.3\"><!--sv=13;//--></script><script\nlanguage=\"javascript\"><!--arg=\"&bn=\"+bn+\"&bv=\"+bv+\"&ss=\"+ss+\"&sc=\"+sc+\"&dt=\"+dt+\"&sv=\"+sv;arg+=\"&ja=\"+ja+\"&rf=\"+rf+\"&ln=\"+ln+\"&pl=\"+escape(pl);x1=\"<a href='http://www.hitbox.com'>\";x2=\"<img src='http://w122.hitbox.com/Hitbox?hb=W28907065181\";x3=\"&cd=1&bt=1' border='0' height='60' width='234'\";x4=\"alt='CLICK HERE TO VISIT THE HITBOX.COM'></a>\";document.write(x1+x2+arg+x3+x4);//--></script><script language=\"javascript1.2\"><!--document.write(\"<\");document.write(\"!--\");//--></script><font\nface=\"Trebuchet MS\">Read my standard disclaimer: <a href=\"../StdDisclaimer.html\">(really?)</a><br>\nLast change on 15-04-03 by <a href=\"mailto:syring@web.de\">Karl M. Syring</a> (bug reports\nare welcome)<br>\nOriginal location of this page: <a\nhref=\"http://www.weihenstephan.de/~syring/win32/UnxUtils.html\">http://www.weihenstephan.de/~syring/win32/UnxUtils.html</a></font></p>\n<!-- BEGIN WEBSIDESTORY CODE V5. COPYRIGHT 1998-2000 WEBSIDESTORY, INC. ALL RIGHTS RESERVED. U.S. PATENT PENDING. -->\n<!-- webbot bot=\"HTMLMarkup\" startspan -->\n<!-- webbot bot=\"HTMLMarkup\" endspan -->\n<!-- END WEBSIDESTORY CODE  -->\n<!-- End Mind It Box -->\n</body>\n</html>\n"
  },
  {
    "path": "bin/xidel/readme.txt",
    "content": "\n================================================ Basics ================================================\n\n\nThe trivial usage is to extract an expression from a webpage like:\n  \n   xidel http://www.example.org --extract //title\n\nInstead of one or more urls, you can also pass file names or the xml data itself (xidel \"<html>..\" ...). \nThe --extract option can be abbreviated as -e, and there are five different kind of extract expressions:\n \n  1 ) XPath 2 expressions, with some changes and additional functions.\n  \n  2 ) XQuery 1 expressions\n  \n  3 ) CSS 3 selectors. \n \n  4 ) Templates, a simplified version of the page which is pattern matched against the input\n  \n  5 ) Multipage templates, i.e. a file that contains templates for several pages\n\nThe different kinds except multipage templates are usually automatically detected, but \na certain type can be forced with the extract-kind option.\nOr by using the shorter --xpath \"..\", --xquery \"..\", --css \"..\" options.\nEspecially XQuery and template expressions are easily confused by the auto detector. \n(Xidel assumes templates, if the expression starts with a \"<\" )\n\nSee the sections below for a more detailed description of each expression kind.\n\n\n\nThe next important option is --follow (abbreviated as -f) to follow links on a page. E.g: \n\n   xidel http://www.example.org --follow //a --extract //title \n\nThis will print the titles of all pages that are linked from http://www.example.org.\n\n--follow supports the same expressions as --extract, and it will follow the href or src attributes of the \nusual elements, or the contained text if there are no such attributes.\n\n\n\n==============================  Recursion / Argument order and grouping ===============================\n\n\nYou can specify multiple --extract (-e) and --follow (-f) arguments to extract values from one page, \nfollow the links to the next pages and extract values from there as well ...\nThen it becomes important in which order the arguments are given, so it extracts before following, \nor the other way around.  \nYou can usually read it left-to-right like an English sentence, extracting from the current page,\nor following to a new one, which will then become the next current page.\nFor example:\n\na) xidel http://site1  -e \"select content 1\"  http://site2  -e \"select content 2\" \n  \n    This will extract content 1 from site 1 and content 2 from site 2\n\nb) xidel http://site1 http://site2 -e \"select content 1\"  -e \"select content 2\"\n\n    This will extract content 1 and 2 from site 1 as well as from site 2\n\nc) xidel http://site1  -e \"select content 1\"     -f \"//a (:select links:)\"  -e \"select content 2\"\n\n    This will extract the \"content 1\" from site1, and \"content 2\" from all sites the first site has links to. \n    \nd) xidel http://site1  -f \"//a (:select links:)\" -e \"select content 1\"      -e \"select content 2\"\n \n    This will extract \"content 1\" and \"content 2\" from all sites the first site links to, and will not \n    extract anything from site1.    \n\ne) xidel http://site1  -e \"select content 1\"     -e \"select content 2\"      -f \"//a (:select links:)\"\n\n   This  is some kind of special case. Since -f is the last option, it will repeat the previous operation, i.e.\n   it will extract content 1 and 2 from site1 and ALL sites that can be reached by an selected link on site1 \n   or any other of the processed sites. \n   Only if there were another -e after -f, it would extract that from the first set of followed links and stop.\n \nIn some kinds of extract expression you can create new variables, if you assign values to a variable called\n\"_follow\", that value will be included in the next follow expression. \nIf you assign an object to _follow, its properties will override the command line parameters with the same\nvalue. \n\nGenerally an option modifier (like --extract-kind) affects all succeeding options, unless there are none, \nthen it affects the immediate preceding option.\n\n\n\n\nYou can always override the argument order by using [ and ] to group the options.\nFor example:\n\nf) xidel http://site1 [ -f \"//a (:select links:)\" -e \"select content 1\" ]  -e \"select content 2\"\n  \n   This will extract content 1 from all sites linked by site1 and content 2 from site1 itself.\n   I.e. the extract of content 2 is not affected by the follow-option within the [..] brackets.\n\ng) xidel http://site1 [ -f //a[@type1] --download type1/ ]   \n                      [ -f //a[@type2] --download type2/ ]   \n                      [ -f //a[@type3] --download type3/ ] \n   \n   This will download all links of type 1 in a directory type1, all links of type2 in directory type2...\n   (if written on one line)\n \n[ and ] must be surrounded by a space.\n\n\n\n\n\n\n========================================== XPath 2.0 / XQuery ===========================================\n\nXPath expressions provide an easy way to extract calculated values from x/html. \nSee http://en.wikipedia.org/wiki/XPath_2.0 for details.\n\nXidel also supports JSONiq and some custom extensions, so it deviates in a few ways from the standard. \nHowever, you can disable this differences with the respective options (see link below or the\ncommand line parameter listing printed by --help).\nSwitched to full standard compatible mode, its implementation passes 99.3% of the XPath 2 only tests and \n97.8% of the XQuery 1 tests in the XQuery Testsuite (skipping tests for invalid input queries)\n\nHowever, in the default mode, there are the following important extensions:\n\n  Syntax:\n  \n    Variable assignment:                                         $var := value\n   \n      adds $var to a set of global variables, which can be created and accessed \n      everywhere\n\n    JSONiq literals                                           true, false, null\n    \n      true and false are evaluated as true(), false(), null becomes jn:null()\n    \n    JSONiq arrays:                                                     [a,b,c]\n\n       Arrays store a list of values and can be nested with each other and \n       within sequences.\n       jn:members converts an array to a sequence.\n\n    JSONiq objects:                                      {\"name\": value, ...}\n    \n       Object stores a set of values as associative map. The values can be \n       accessed similar to a function call, e.g.: {\"name\": value, ...}(\"name\").\n       Xidel also has {\"name\": value, ..}.name as an additional syntax to \n       access properties.\n       jn:keys returns a sequence of all property names, libjn:values a sequence\n       of values.\n       Used with global variables, you can copy an object with obj2 := obj \n       (objects are immutable, but properties can be changed with \n       obj2.foo := 12, which will create a new object with the changed property)\n      \n    Extended strings:                                                x\"..{..}..\"\n  \n      If a string is prefixed by an \"x\", all expressions inside {}-parentheses \n      are evaluated, like in the value of a direct attribute constructor.\n      (Warning: This was changed in Xidel 0.7. Xidel <= 0.6 used \n                \"foo$var;bar\" without prefix for this)\n      \n       \n  Semantic:\n     \n     All string comparisons are case insensitive, and \"clever\", e.g.: \n              '9xy' = '9XY' < '10XY' < 'xy'\n     This is more useful for html (think of @class = 'foobar'), but can be \n     disabled by passing collation urls to the string functions. \n     \n     Everything is weakly typed, e.g 'false' = false() is true, and 1+\"2\" is 3. \n\n     Unknown namespace prefixes are resolved with the namespace bindings of the \n     input data. \n     Therefore //a always finds all links, independent of any xmlns-attributes.\n     (however, if you explicitly declare a namespace like \n     'declare default element namespace \"...\"' in XQuery, it will only find \n     elements in that namespace)\n\n     XML Schemas, error codes and static type checking are not supported.\n\n  Certain additional functions:\n  \n    jn:*, libjn:* The standard JSONiq and JSONlib functions\n    json(\"str.\")  Parses a string as json, or downloads json from an url.(only use with trusted input)\n    serialize-json(value) \n                  Converts a value to JSON\n    extract(\"string\",\"regex\"[,<match>,[<flags>]])\n                  This applies the regex \"regex\" to \"string\" and returns only the matching part. \n                  If the <match> argument is used, only the <match>-th submatch will be returned.\n                  (this function used to be called \"filter\")\n    css(\"sel\")    This returns the nodes below the context node matched by the specified css 3 selector.\n                  You can use this to combine css and XPath, like in 'css(\"a.aclass\")/@href'.\n    eval(\"xpath\") This will evaluate the string \"xpath\" as an XPath expression\n    system(\"..\")  Runs a certain program and returns its stdout result as string\n    deep-text()   This is the concatenated plain text of the every tag inside the current text. \n                  You can also pass a separator like deep-text(' ') to separate text of different nodes.\n    inner-html()  This is the html content of node ., like innerHTML in javascript.  \n    outer-html()  This is the same as inner-html, but includes the node itself\n    inner-xml()   This is the xml content of node, similar to inner-html()\n    outer-xml()   Like outer-html(), but xml-serialized\n    split-equal(\"list\", \"string\"[, \"sep\" = \" \"])\n                  Treats the string \"list\" as a list of strings separated by \"sep\" and tests if \n                  \"string\" is contained in that list. (just like css class matching)\n    form(form, [overridden parameters = ()])\n                  Converts a html form in a http request, by url encoding all inputs descendants\n                  of the given form node. You can give a sequence of parameters to  override.\n                  e.g. form(//form[1], \"foo=bar&xyz=123\") returns a request for the first form,\n                  with the foo and xyz parameters overriden by bar and 123.\n                  You can also use a JSON object to set the override parameters, e.g.\n                  {\"foo\": \"bar\", \"xyz\": 123}, in that case they are url encoded.\n                  It returns an object with .url, .method and .post properties.\n    match(<template>, <node>)\n                  Performs pattern matching between the template (see below for template documentation) \n                  and the nodes, and returns a list or an object of matched values.\n                  For exmple match(<a>{{.}}</a>, <x><a>FOO</a><a>BAR</a></x>) returns <a>FOO</a>, and\n                  match(<a>*{{.}}</a>, <x><a>FOO</a><a>BAR</a></x>) returns (<a>FOO</a>, <a>BAR</a>).\n                  It is also possible to use named variables in the template, in which case an object \n                  is returned, e.g:\n                    match(<x><a>{{first:=.}}</a><a>{{second:=.}}</a></x>, <x><a>FOO</a><a>BAR</a></x>)\n                  returns an object with two properties \"first\" and \"bar\", containing respectively\n                    <a>FOO</a> and <a>BAR</a>.\n                  The template can be a node or a string. Written as string the above example would be\n                    match(\"<a>{.}</a>\", <x><a>FOO</a><a>BAR</a></x>).\n                 \n    All additional functions except the jn/libjn functions are in the pxp: namespace, which is also set\n    as default namespace.\n\nThe pasdoc documentation of my XPath 2 / XQuery library explains more details and lists more functions:\nhttp://www.benibela.de/documentation/internettools/xquery.TXQueryEngine.html\n\n\n\n========================================== CSS 3.0 Selectors ==========================================\n\n\nCSS 3 Selectors are fully supported, except some pseudoclasses like :hover and ::before that do not \nmake sense in a gui less, reading-only application.\n(It is however not much tested, since I personally only use XPath)\n\nThe easiest way to use CSS selectors with the command line is to write it like --extract \"css('selector')\"\n(the \"-quotes are necessary to escape the '-quotes.) \n\nAlternatively you can use --extract-kind=css --extract=\"your selector\", or --css=\"your selector\"\n\n\n\n============================================== Templates ==============================================\n\nTemplates are a very easy way to extract complex data from a webpage. \nEach template is basically a stripped-down excerpt of the webpage, in which the relevant parts have \nbeen annotated.\n\nThe best way to describe templates is with a real world example:\n\nThe following is the html of an entry of one of the recommended videos you can always see at the right\nside of an youtube video: (skipped the image part for clarity)\n\n  <li class=\"video-list-item\">\n    <a href=\"/watch?v=F6SeX76_F5Q&amp;feature=related\" class=\"related-video yt-uix-contextlink yt-uix-sessionlink\" \n       data-sessionlink=\"ved=CBQQzRooEQ%3D%3D&amp;ei=CIDyscip97ECFcWw3godn3H0ug%3D%3D&amp;feature=related\">\n      <!-- skipped -->\n      <span dir=\"ltr\" class=\"title\" title=\"Idras Sunhawk Lyrics\">Idras Sunhawk Lyrics</span>\n      <span class=\"stat attribution\">by <span class=\"yt-user-name \" dir=\"ltr\">FolkAndPaganSongs</span></span>\n      <span class=\"stat view-count\">5.634 views</span>\n    </a>\n  </li>\n\nAs you see there are actual interesting values like the url/title/username/view texts, and irrelevant, \nchanging values like the session url.\nIf you now remove the irrelevant parts, and annotate the interesting values as {name:=value}, \nyou get the following:\n\n  <li class=\"video-list-item\">\n    <a>\n      <span dir=\"ltr\" class=\"title\">{title:=.}</span>\n      <span class=\"stat attribution\"><span class=\"yt-user-name \" dir=\"ltr\">{username:=.}</span></span>\n      <span class=\"stat view-count\">{views:=filter(., \"[0-9.]+\")}</span>\n      {url := @href}\n    </a>\n  </li>+\n\nThis template can directly passed as an extract-expression, applied to the page of an youtube video,\nand will return all recommended/related videos.\nMore precisely, it will return four (interleaved) arrays \"title\", \"username\", \"views\", \"url\" each \ncontaining the relevant values.\n\nA basic template as above consists of three different kind of expressions:\n\n <li .../>   A normal html element will be matched to the processed html page.\n             This means it will search the first element on the page, that has the same node name,\n             all the attributes with the same values, and whose children match the children of the \n             template element.             \n \n {..}        A {} marker will execute the contained XPath expression, once the corresponding \n             place in the html page has been found. \n             The context node . will refer to the surrounding element, and you can use my extended \n             XPath syntax (var := value) to create a variable. (see XPath above)\n             Often you want to read the entire matched element in a variable with $name, which\n             can be written as {$name := .} or further abbreviated as {$name} .             \n             It can also be used within attributes, like <a x=\"{.}\"/> to read the attribute value.\n             (the parentheses can be also replaced by <template:s>..</template:s> or <t:s>..</t:s>)\n             \n \n  +          Finally the loop marker will repeat the matching of the previous element as long as \n             possible (an similar syntax is <t:loop>..</t:loop> or <t:loop>..</t:loop>).\n            \n            \n\nThis is sufficient for most basic scraping operations, but you can also use the following things in a \ntemplate:\n \n textnodes                Textnodes are matched like html element nodes.\n                          A textnode in the webpage is considered a valid match, if it starts\n                          with the same text as the text node in the template.\n                          (but you can change this behavior to ends-with/exact/regex-comparisons with \n                          the  <t:meta [default-text-matching=\"??\"] [default-case-sensitive=\"??\"]/>\n                          command)\n \n <t:if test=\"??\"/>        All children of a template:if-tag are ignored if the test-XPath-expressions \n                          evaluates to false()\n \n <t:switch [value=\"??\"]>  Only one of the child elements will be used for matching\n\n <t:switch-prioritized>   Same a t:switch, but it will choose the earliest template child that has a match.\n \n t:optional=\"true\"        Html nodes can be marked as optional, and they will be ignored, if no possible\n                          match can be found\n \n t:condition=\"??\"         An XPath expression that c be The context node (.) refers to a potential match.\n \n *                        Like +, but it can also match none\n \n {min,max} or {count}     Matches between [min,max] or {count}-many occurrences of the previous element\n \n \n <t:loop min=.. max=../>  The same as above. However, t:loop will repeat all its children, while a marker \n                          like + can only repeat the single, previous element.\n                          \n ?                        Short notation for t:optional. \n \n(see http://www.benibela.de/documentation/internettools/extendedhtmlparser.THtmlTemplateParser.html \n for  more detailed explanations)\n \n\nThere is also a Greasemonkey script to create templates directly by just selecting the text on the \ncorresponding webpage.\n\n\n\n========================================= Multipage templates ==========================================\n\nMultipage templates collect several single page templates in a xml file.\nThey are basically just a list of <page/> nodes with <post/> data and associated <template/>s\nE.g.\n\n  <action>\n    <page url=\"http://www.example.org/url\">\n      <post name=\"var\">unescaped post data</post>\n      <post>your=escaped&post=data&...</post>\n      <template> \n        <a>{alink:=.}</a>* \n      </template>\n    </page>\n    \n    <page ...> ... </page>\n    \n    ...\n  </action>\n\nAll pages are downloaded with GET or respectively POST requests, and processed with the given template.\nThe page-node also accepts a \"test\" attribute, which gives an XPath expression that needs to be true, \nif the page element should be used.\nIn the attributes and the text of post-nodes, everything enclosed in {..} parentheses is evaluated\nas xpath expression. (like in an extended x\"..\" string, see above)\n\nSince this would be cumbersome to pass directly to --extract, you can also specify the containing file\nwith the --template-file argument.\n\nYou can also have multiple <action/>s in a multipage template (surrounded by a parent element with \nname <actions>), and call the later actions with <call action=\"..\"/> from another action.\nIf a template with multiple actions is passed to Xidel it will always perform the first action,\nunless the --template-action parameter specifies another action to run. (in Xidel > 0.5)\n\nThere are also <variable>-elements to declare variables and <loop>-elements to repeat other elements, \nsee http://www.benibela.de/documentation/internettools/multipagetemplate.TMultiPageTemplate.html\nfor more details.\n\n=========================================== Input formats =============================================\n\nXidel supports html and xml input, and the option input-format can be used to set the parsing behaviour:\n  \nauto:           Automatically switch between html and xml\n  \nhtml:           The input will be parsed as html. \n                Missing tags like head, body, tbody are automatically created.\n                (beware that this means table/tr is never valid, and either table//tr or table/tbody/tr\n                has to be used)\n \nxml:            The input will be parsed as xml. \n                However, it still uses the html parser, so it will correct missing end tags and not\n                support DTDs.\n                \nxml-strict:     The input will be parsed as strict xml. \n                This uses the standard fpc, validating xml parser.\n                \nYou can also use json files, by loading them explicitly with pxp:json() or jn:json-doc() within a\nXPath/XQuery expression.\n\n=========================================== Output formats =============================================\n\nXidel has several different output formats, which can be chosen with the output-format option:\n\nadhoc:          A very simple format, it will just print all values (default)\n\nxml:            The output will be serialized as xml\n\nhtml:           The output will be serialized as html\n\nxml-wrapped:    It will print a xml-based machine readable output.\n                Sequences will become <seq><e>value 1</e><e>value 2</e>...</seq>\n                Objects will become <object><property-1>value 1</property-1><prop-2>..</prop-2>..</object>\n                (so in contrast to xml, it will keep variable names and type information intact)\n\njson-wrapped:   It will print a json-based machine readable output.\n                Sequences become arrays [ ... ].\n                Objects become objects. {\"prop-1\": \"value 1\", \"prop-2\": \"value 2\", ... }       \n                (this was called json before Xidel 0.7)\n\nbash:           Prints a bash script that sets the internal variables as bash variables.\n                E.g.\n                eval $(xidel http://data -e 'title:=//title' -e 'links:=//a')\n                can be used to set the bash variable $title to the title of a page and the\n                variable $links to a bash array of all links on the page.\n\ncmd:            Like bash, but for Windows cmd.exe\n\nGenerally it prints a sequence of all processed pages (i.e. each page a single sequence element), \nand the variables defined as global variables or read by a template become variables or \nobject properties.\nThere is a special rule for json-wrapped  output, if the template assigns multiple values to the same\nvariable: Xidel will collect all these values in an array. I.e. (a:=1, b:=2, a:=3, c:=4)\nbecomes \"a\": [1, 3], \"b\": 2. \"c\": 4\n\n\n\n\n\n"
  },
  {
    "path": "build.bat",
    "content": "@echo off\nsetlocal EnableDelayedExpansion \n\nset PROGFILES=%ProgramFiles%\nif not \"%ProgramFiles(x86)%\" == \"\" set PROGFILES=%ProgramFiles(x86)%\n\nREM Check if Visual Studio 2017 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio\\2017\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n   \tset COMPILER_VER=\"2017\"\n    echo Using Visual Studio 2017 Community\n\tgoto setup_env\n  )\n)\nREM Check if Visual Studio 2015 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 14.0\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n   \tset COMPILER_VER=\"2015\"\n        echo Using Visual Studio 2015\n\tgoto setup_env\n  )\n)\nREM Check if Visual Studio 2013 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 12.0\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n    set COMPILER_VER=\"2013\"\n    echo Using Visual Studio 2013\n\tgoto setup_env\n  )\n)\n\nREM Check if Visual Studio 2012 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 11.0\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 11.0\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n    set COMPILER_VER=\"2012\"\n    echo Using Visual Studio 2012\n\tgoto setup_env\n  )\n)\n\nREM Check if Visual Studio 2010 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 10.0\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n    set COMPILER_VER=\"2010\"\n    echo Using Visual Studio 2010\n\tgoto setup_env\n  )\n)\n\nREM Check if Visual Studio 2008 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 9.0\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 9.0\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n    set COMPILER_VER=\"2008\"\n    echo Using Visual Studio 2008\n\tgoto setup_env\n  )\n)\n\nREM Check if Visual Studio 2005 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio 8\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio 8\\VC\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n\tset COMPILER_VER=\"2005\"\n    echo Using Visual Studio 2005\n\tgoto setup_env\n  )\n) \n\nREM Check if Visual Studio 6 is installed\nset MSVCDIR=\"%PROGFILES%\\Microsoft Visual Studio\\VC98\"\nset VCVARSALLPATH=\"%PROGFILES%\\Microsoft Visual Studio\\VC98\\vcvarsall.bat\"\nif exist %MSVCDIR% (\n  if exist %VCVARSALLPATH% (\n\tset COMPILER_VER=\"6\"\n    echo Using Visual Studio 6\n\tgoto setup_env\n  )\n) \n\necho No compiler : Microsoft Visual Studio (6, 2005, 2008, 2010, 2012, 2013 or 2015) is not installed.\ngoto end\n\n:setup_env\n\necho Setting up environment\nif %COMPILER_VER% == \"6\" (\n\tcall %MSVCDIR%\\Bin\\VCVARS32.BAT\n\tgoto begin\n)\n\n:begin\n\nREM Setup path to helper bin\nset ROOT_DIR=\"%CD%\"\nset RM=\"%CD%\\bin\\unxutils\\rm.exe\"\nset CP=\"%CD%\\bin\\unxutils\\cp.exe\"\nset MKDIR=\"%CD%\\bin\\unxutils\\mkdir.exe\"\nset SEVEN_ZIP=\"%CD%\\bin\\7-zip\\7za.exe\"\nset XIDEL=\"%CD%\\bin\\xidel\\xidel.exe\"\n\nREM Housekeeping\n%RM% -rf tmp_*\n%RM% -rf third-party\n%RM% -rf curl.zip\n%RM% -rf build_*.txt\n\nREM Get download url .Look under <blockquote><a type='application/zip' href='xxx'>\necho Get download url...\n%XIDEL% https://curl.haxx.se/download.html -e \"//a[@type='application/zip' and ends-with(@href, '.zip')]/@href\" > tmp_url\nset /p url=<tmp_url\n\nREM exit on errors, else continue\nif %errorlevel% neq 0 exit /b %errorlevel%\n\nREM Download latest curl and rename to curl.zip\necho Downloading latest curl...\nset \"LOCAL_CURL=%~dp0\\curl.zip\"\nbitsadmin.exe /transfer \"curltransfer\" \"https://curl.haxx.se%url%\" \"%LOCAL_CURL%\"\n\nREM Extract downloaded zip file to tmp_libcurl\n%SEVEN_ZIP% x curl.zip -y -otmp_libcurl | FIND /V \"ing  \" | FIND /V \"Igor Pavlov\"\n\ncd tmp_libcurl\\curl-*\\winbuild\n\nif %COMPILER_VER% == \"6\" (\n\tset VCVERSION = 6\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2005\" (\n\tset VCVERSION = 8\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2008\" (\n\tset VCVERSION = 9\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2010\" (\n\tset VCVERSION = 10\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2012\" (\n\tset VCVERSION = 11\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2013\" (\n\tset VCVERSION = 12\n\tgoto buildnow\n)\n\nif %COMPILER_VER% == \"2015\" (\n\tset VCVERSION = 14\n\tgoto buildnow\n)\nif %COMPILER_VER% == \"2017\" (\n\tset VCVERSION = 15\n\tgoto buildnow\n)\n\n:buildnow\nREM Build!\necho \"Building libcurl now!\"\n\nif [%1]==[-static] (\n\tset RTLIBCFG=static\n\techo Using /MT instead of /MD\n) \n\necho \"Path to vcvarsall.bat: %VCVARSALLPATH%\"\ncall %VCVARSALLPATH% x86\n\necho Compiling dll-debug-x86 version...\nnmake /f Makefile.vc mode=dll VC=%VCVERSION% DEBUG=yes\n\necho Compiling dll-release-x86 version...\nnmake /f Makefile.vc mode=dll VC=%VCVERSION% DEBUG=no GEN_PDB=yes\n\necho Compiling static-debug-x86 version...\nnmake /f Makefile.vc mode=static VC=%VCVERSION% DEBUG=yes\n\necho Compiling static-release-x86 version...\nnmake /f Makefile.vc mode=static VC=%VCVERSION% DEBUG=no\n\ncall %VCVARSALLPATH% x64\necho Compiling dll-debug-x64 version...\nnmake /f Makefile.vc mode=dll VC=%VCVERSION% DEBUG=yes MACHINE=x64\n\necho Compiling dll-release-x64 version...\nnmake /f Makefile.vc mode=dll VC=%VCVERSION% DEBUG=no GEN_PDB=yes MACHINE=x64\n\necho Compiling static-debug-x64 version...\nnmake /f Makefile.vc mode=static VC=%VCVERSION% DEBUG=yes MACHINE=x64\n\necho Compiling static-release-x64 version...\nnmake /f Makefile.vc mode=static VC=%VCVERSION% DEBUG=no MACHINE=x64\n\nREM Copy compiled .*lib, *.pdb, *.dll files folder to third-party\\lib\\dll-debug folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x86-debug-dll-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x86\n%CP% lib\\*.pdb %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x86\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x86\n%CP% bin\\*.dll %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x86\n\nREM Copy compiled .*lib, *.pdb, *.dll files to third-party\\lib\\dll-release folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x86-release-dll-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x86\n%CP% lib\\*.pdb %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x86\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x86\n%CP% bin\\*.dll %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x86\n\nREM Copy compiled .*lib file in lib-release folder to third-party\\lib\\static-debug folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x86-debug-static-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\static-debug-x86\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\static-debug-x86\n\nREM Copy compiled .*lib files in lib-release folder to third-party\\lib\\static-release folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x86-release-static-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\static-release-x86\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\static-release-x86\n\nREM Copy compiled .*lib, *.pdb, *.dll files folder to third-party\\lib\\dll-debug folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x64-debug-dll-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x64\n%CP% lib\\*.pdb %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x64\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x64\n%CP% bin\\*.dll %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-debug-x64\n\nREM Copy compiled .*lib, *.pdb, *.dll files to third-party\\lib\\dll-release folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x64-release-dll-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x64\n%CP% lib\\*.pdb %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x64\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x64\n%CP% bin\\*.dll %ROOT_DIR%\\third-party\\libcurl\\lib\\dll-release-x64\n\nREM Copy compiled .*lib file in lib-release folder to third-party\\lib\\static-debug folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x64-debug-static-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\static-debug-x64\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\static-debug-x64\n\nREM Copy compiled .*lib files in lib-release folder to third-party\\lib\\static-release folder\ncd %ROOT_DIR%\\tmp_libcurl\\curl-*\\builds\\libcurl-vc-x64-release-static-ipv6-sspi-winssl\n%MKDIR% -p %ROOT_DIR%\\third-party\\libcurl\\lib\\static-release-x64\n%CP% lib\\*.lib %ROOT_DIR%\\third-party\\libcurl\\lib\\static-release-x64\n\n\nREM Copy include folder to third-party folder\n%CP% -rf include %ROOT_DIR%\\third-party\\libcurl\n\nREM Cleanup temporary file/folders\ncd %ROOT_DIR%\n%RM% -rf tmp_*\n\n:end\necho Done.\nexit /b\n"
  }
]