home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD 45 / SuperCD45.iso / talleres / perl / wintools / cygwin-b20 / faq.txt
Text File  |  1998-12-05  |  143KB  |  3,977 lines

  1.             The Cygwin Project FAQ 20.2 for Release B20.1
  2.  
  3. What is it?
  4. ***********
  5.  
  6.    The Cygwin tools are ports of the popular GNU development tools for
  7. Windows NT, 95, and 98.  They run thanks to the Cygwin library which
  8. provides the UNIX system calls and environment these programs expect.
  9.  
  10.    With these tools installed, it is possible to write Win32 console or
  11. GUI applications that make use of the standard Microsoft Win32 API
  12. and/or the Cygwin API.  As a result, it is possible to easily port many
  13. significant Unix programs without the need for extensive changes to the
  14. source code.  This includes configuring and building most of the
  15. available GNU software (including the packages included with the Cygwin
  16. development tools themselves).  Even if the development tools are of
  17. little to no use to you, you may have interest in the many standard
  18. Unix utilities provided with the package.  They can be used both from
  19. the bash shell (provided) or from the standard Windows command shell.
  20.  
  21. Is it free software?
  22. ====================
  23.  
  24.    Yes.  Parts are GNU software (gcc, gas, ld, etc...), parts are
  25. covered by the standard Berkeley license, some of it is public domain,
  26. some of it was written by Cygnus and placed under the GPL.  None of it
  27. is shareware.  You don't have to pay anyone to use it but you should be
  28. sure to read the copyright section of the FAQ more more information on
  29. how the GNU General Public License may affect your use of these tools.
  30.  
  31.    In particular, if you intend to port a commercial (non-GPL'd)
  32. application using Cygwin, you will need the commercial license to Cygwin
  33. that comes with the supported native Win32 GNUPro product.  The price
  34. for five users is $7495, which includes the GNUPro Toolkit, Mission
  35. Critical Support for one year, and a commercially licensed version of
  36. the Cygwin library.  For more information about the commercial-use
  37. license, please contact info@cygnus.com.  All other questions should be
  38. sent to the project mailing list gnu-win32@cygnus.com.
  39.  
  40. A brief history of the project
  41. ==============================
  42.  
  43.    The first thing done was to enhance the development tools (gcc, gdb,
  44. gas, et al) so that they could generate/interpret Win32 native object
  45. files.
  46.  
  47.    The next task was to port the tools to Win NT/95.  We could have done
  48. this by rewriting large portions of the source to work within the
  49. context of the Win32 API.  But this would have meant spending a huge
  50. amount of time on each and every tool.  Instead, we took a substantially
  51. different approach by writing a shared library (cygwin.dll) that adds
  52. the necessary unix-like functionality missing from the Win32 API (fork,
  53. spawn, signals, select, sockets, etc.).  We call this new interface the
  54. Cygwin API.  Once written, it was possible to build working Win32 tools
  55. using unix-hosted cross-compilers, linking against this library.
  56.  
  57.    From this point, we pursued the goal of producing native tools
  58. capable of rebuilding themselves under Windows 95 and NT (this is often
  59. called self-hosting).  Since neither OS ships with standard UNIX user
  60. tools (fileutils, textutils, bash, etc...), we had to get the GNU
  61. equivalents working with the Cygwin API.  Most of these tools were
  62. previously only built natively so we had to modify their configure
  63. scripts to be compatible with cross-compilation.  Other than the
  64. configuration changes, very few source-level changes had to be made.
  65. Running bash with the development tools and user tools in place,
  66. Windows 95 and NT look like a flavor of UNIX from the perspective of the
  67. GNU configure mechanism.  Self hosting was achieved as of the beta 17.1
  68. release.
  69.  
  70.    After adding Windows 98 support to Cygwin in mid-1998, we added
  71. support for the native Microsoft libraries in the compiler which allows
  72. compilation of executables that do not use Cygwin.  This is important to
  73. those people who want to use the tools to develop Win32 applications
  74. that do not need the UNIX emulation layer.
  75.  
  76. Cygwin Resources on the Internet
  77. ********************************
  78.  
  79. FTP Sites
  80. =========
  81.  
  82.    The primary ftp site is
  83. `ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/'.  There are
  84. also several mirrors:
  85.  
  86.    * North America:
  87.         * Alberta: `ftp://ftp.reversion.ca/pub/mirrors/cygwin/'
  88.  
  89.         * Arizona: `ftp://ftp.ninemoons.com/pub/cygwin/'
  90.  
  91.         * California:
  92.           `ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/'
  93.  
  94.         * California:
  95.           `ftp://ftp.yggdrasil.com/mirrors/site/ftp.cygnus.com/pub/gnu-win32/'
  96.  
  97.         * California (secondary):
  98.           `ftp://sourceware.cygnus.com/pub/cygwin/'
  99.  
  100.         * Kansas: `ftp://ftp.the-b.org/pub/cygwin/'
  101.  
  102.         * Tennessee: `ftp://sunsite.utk.edu/pub/cygwin/'
  103.  
  104.    * Central America:
  105.         * Costa Rica: `ftp://sunsite.ulatina.ac.cr/gnu-win32/'
  106.  
  107.    * South America:
  108.         * Brazil: `ftp://ftp.unicamp.br/pub/gnu/=EXTRA=/cygnus/cygwin/'
  109.  
  110.    * Africa:
  111.         * South Africa:
  112.           `ftp://ftp.sun.ac.za/sites/sourceware.cygnus.com/pub/cygwin/'
  113.  
  114.    * Asia:
  115.         * Japan: `ftp://ring.aist.go.jp/archives/pc/gnu-win32/'
  116.  
  117.         * Japan: `ftp://ring.etl.go.jp/archives/pc/gnu-win32/'
  118.  
  119.         * Japan: `ftp://ring.asahi-net.or.jp/archives/pc/gnu-win32/'
  120.  
  121.         * Japan: `ftp://ring.crl.go.jp/archives/pc/gnu-win32/'
  122.  
  123.         * Japan: `ftp://ring.astem.or.jp/archives/pc/gnu-win32/'
  124.  
  125.         * Japan: `ftp://ring.jah.ne.jp/archives/pc/gnu-win32/'
  126.  
  127.         * Japan: `ftp://ring.saitama-u.ac.jp/archives/pc/gnu-win32/'
  128.  
  129.         * Japan: `ftp://ring.nacsis.ac.jp/archives/pc/gnu-win32/'
  130.  
  131.         * Japan: `ftp://ring.exp.fujixerox.co.jp/archives/pc/gnu-win32/'
  132.  
  133.         * Japan: `ftp://ring.so-net.ne.jp/archives/pc/gnu-win32/'
  134.  
  135.         * Japan: `ftp://ring.ip-kyoto.ad.jp/archives/pc/gnu-win32/'
  136.  
  137.         * Japan: `ftp://sysg.kek.jp/cygnus/cygwin/'
  138.  
  139.         * Japan: `ftp://ftp.u-aizu.ac.jp/pub/gnu/gnu-win32/'
  140.  
  141.         * Korea: `ftp://cair-archive.kaist.ac.kr/pub/gnu/gnu-win32/'
  142.  
  143.    * Australasia:
  144.         * Australia: `ftp://mirror.aarnet.edu.au/pub/cygwin/'
  145.  
  146.    * Europe:
  147.         * Austria: `ftp://gd.tuwien.ac.at/gnu/cygwin/'
  148.  
  149.         * Czech Republic:
  150.           `ftp://sunsite.ms.mff.cuni.cz/MIRRORS/sourceware.cygnus.com/pub/cygwin/'
  151.  
  152.         * Denmark: `ftp://sunsite.auc.dk/pub/cygwin/'
  153.  
  154.         * Germany:
  155.           `ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin32/mirrors/cygnus/'
  156.  
  157.         * Greece: `ftp://ftp.ntua.gr/pub/pc/cygwin/'
  158.  
  159.         * Hungary: `ftp://ftp.szrmkk.hu/pub/gnu-win32/ftp.cygnus.com/'
  160.  
  161.         * Poland: `ftp://sunsite.icm.edu.pl/pub/cygnus/cygwin/'
  162.  
  163.         * Slovenia: `ftp://sunsite.fri.uni-lj.si/pub/gnu-win32/'
  164.  
  165.         * Spain: `ftp://ftp.rediris.es/mirror/gnu-win32/'
  166.  
  167.         * Sweden: `ftp://ftp.sunet.se/pub/lang/cygwin/'
  168.  
  169.         * Switzerland: `ftp://sunsite.cnlab-switch.ch/mirror/cygwin/'
  170.  
  171.         * UK:
  172.           `ftp://sunsite.org.uk/Mirrors/sourceware.cygnus.com/pub/cygwin/'
  173.  
  174.         * UK:
  175.           `ftp://ftp.ccp14.dl.ac.uk/ccp14/ftp-mirror/programming/cygnus-gnu-win32/pub/gnu-win32/'
  176.  
  177. The Cygwin Project WWW Site
  178. ===========================
  179.  
  180.    The main WWW page for the Cygwin project is
  181. `http://sourceware.cygnus.com/cygwin/'.
  182.  
  183.    A page containing tool-specific information is
  184. `http://www.cygnus.com/pubs/gnupro/'.
  185.  
  186.    Links to additional documentation are accessible from the main web
  187. page.
  188.  
  189. Installation Instructions
  190. *************************
  191.  
  192. Contents
  193. ========
  194.  
  195.    The following packages are included in the full release:
  196.  
  197.    Development tools: binutils, bison, byacc, dejagnu, diff, expect,
  198. flex, gas, gcc, gdb, itcl, ld, libstdc++, make, patch, tcl, tix, tk
  199.  
  200.    User tools: ash, bash, bzip2, diff, fileutils, findutils, gawk,
  201. grep, gzip, m4, sed, shellutils, tar, textutils, time
  202.  
  203.    The user tools release only contains the user tools.
  204.  
  205.    Full source code is available for these tools.  It is split into
  206. these two units.
  207.  
  208. Installing the binary release:
  209. ==============================
  210.  
  211.    Important!  Be sure to remove any older versions of the Cygwin tools
  212. from your PATH environment variable so you do not execute them by
  213. mistake.
  214.  
  215.    Connect to one of the ftp servers listed above and cd to the
  216. directory containing the latest release.  On our primary server, that
  217. would be:
  218.  
  219.    `ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/latest/'.
  220.  
  221.    If you want the development tools and the programs necessary to run
  222. the GNU configure mechanism, you should download the full binary release
  223. called `full.exe'.  If you only care about the user tools listed above,
  224. download `user.exe' instead.
  225.  
  226.    If you have an unreliable connection, download the appropriate
  227. binary in smaller chunks instead.  For the split cdk installer, get the
  228. files in the `full-split' subdirectory.  Once downloaded, combine the
  229. split files at the command prompt by doing a:
  230.  
  231.      copy /b xaa + xab + xac + ... + xak + xal full.exe
  232.      del xa*.*
  233.  
  234.    A similar process can be used for the user tools.
  235.  
  236.    Once you have an install executable on your system, run it.  If a
  237. previous version of the software is detected, it will offer to
  238. uninstall it for you.
  239.  
  240.    Next it will ask you to choose an install location.  The default is
  241. `<system-drive>:\cygnus\cygwin-b20'.  Feel free to choose another
  242. location if you would prefer.
  243.  
  244.    Finally, it will ask you for the name of the Program Files folder
  245. shortcut to add.  By default, the installer will create a `Cygwin B20'
  246. entry in a folder called `Cygnus Solutions'.  When this step is
  247. completed, it will install the tools and exit.
  248.  
  249.    At this point, you should be able to look under the start menu and
  250. select "Cygwin B20".  This will pop up a bash shell with all special
  251. environment variables set up for you.  If you are running Windows 95 or
  252. 98 and are faced with the error message "Out of environment space", you
  253. need to increase the amount of environment space in your config.sys and
  254. try again.  Adding the line `shell=C:\command.com /e:4096 /p' should do
  255. the trick if `C:' is your system drive letter.
  256.  
  257.    There are two remaining thing you should do from this prompt.
  258. First, you need to type `mkdir -p /tmp' to ensure that a directory for
  259. temporary files exists for programs that expect to find one there.
  260.  
  261.    Second, if you are installing the full distribution (`full.exe'),
  262. various programs will need to be able to find `/bin/sh'.  You should
  263. `mkdir -p /bin' and put a copy of `sh.exe' there, removing the older
  264. version, if present.  You can use the `mount' utility to select which
  265. drive letter is mounted as `/'. See the Frequently Asked Questions
  266. (FAQ) file for more information on `mount'.
  267.  
  268.    If you should ever want to uninstall the tools, you may do so via
  269. the "Add/Remove Programs" control panel.
  270.  
  271. Installing the source code
  272. ==========================
  273.  
  274.    Before downloading the source code corresponding to the release, you
  275. should install the latest release of the tools (either the full release
  276. or just the user tools).
  277.  
  278.    Create the directory that will house the source code.  `cd' there.
  279.  
  280.    Connect to one of the ftp servers listed above and cd to the
  281. directory containing the latest release.  On our primary server, that
  282. would be:
  283.  
  284.    `ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/latest/'.
  285.  
  286.    If you want the user tools source code, `cd' into the
  287. `user-src-split' subdirectory.  Download the files there.  If you want
  288. the development tools sources, `cd' into the `dev-src-split'
  289. subdirectory.  Download the files there.
  290.  
  291.    Back in the Windows command shell, for the user tools source:
  292.  
  293.      copy /b xba + xbb + xbc + xbd + xbe + xbf + xbg user-src.tar.bz2
  294.      del xb*.*
  295.      bunzip2 user-src.tar.bz2
  296.      tar xvf user-src.tar
  297.  
  298.    For the development tools source:
  299.  
  300.      copy /b xca + xcb + xcc + xcd + ... + xck + xcl dev-src.tar.bz2
  301.      del xc*.*
  302.      bunzip2 dev-src.tar.bz2
  303.      tar xvf dev-src.tar
  304.  
  305.    Both expand into a directory called `src'.
  306.  
  307.    And you should be done...
  308.  
  309. Upgrading to B20.1
  310. ==================
  311.  
  312.    If you downloaded the original B20.0 release, you should definitely
  313. at least upgrade the Cygwin library to the version present in B20.1.
  314. To do this, download the file
  315. `ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/cygwin-b20/cygwin1-20.1.dll.bz2',
  316. decompress it with bunzip2, and then install the dll, replacing the
  317. file cygwin-b20/H-i586-cygwin32/bin/cygwin1.dll in your original
  318. installation of 20.0.
  319.  
  320.    There are some additional patches in a few of the other tools
  321. (including a gcc change that makes -mno-cygwin find the correct header
  322. files).  In addition, the tools have been built with a compiled-in path
  323. of /cygnus/cygwin-b20/ which will make some tools such as bison find
  324. their library files without help from environment variables.  To
  325. install the full 20.1 release, you will need to download the correct
  326. installer from scratch.  It will offer to uninstall the existing
  327. release and replace it with 20.1 (You should choose to uninstall b20 and
  328. proceed).
  329.  
  330.    We have diff files on the ftp site that can be used to upgrade the
  331. original B20.0 sources.  20.0-20.1-dev-src.diff.bz2 upgrades the
  332. development tools sources.  20.0-20.1-user-src.diff.bz2 upgrades the
  333. user tools sources.  They come compressed so you'll need to bunzip2 them
  334. before proceeding.  As an example, if the development tools are in the
  335. directory called "src" and the patch is in the directory above it, apply
  336. the patch as follows:
  337.  
  338.      cd src
  339.      patch -p1 -E < ../20.0-20.1-dev-src.diff
  340.  
  341. What Unix API calls are supported by Cygwin?
  342. ********************************************
  343.  
  344.    This is the beginning of documentation listing the calls supported
  345. by the Cygwin library.
  346.  
  347.    All POSIX.1/1996 and ANSI C calls are listed in this file.  Note that
  348. while almost all POSIX.1/1990 calls are included in Cygwin, most
  349. POSIX.1/1996 calls are not (yet at least!).  Additional Unix
  350. compatibility calls and extended libc/libm calls are provided by Cygwin
  351. but may or may not be listed yet.
  352.  
  353.    To see if a function is implemented but not listed here, check for
  354. the presence of the call in the file winsup/cygwin.din in the sources.
  355. In addition, you may want to read the source code corresponding to the
  356. call to verify that it is not a stub.  Finally, libc/libm functions
  357. (including extended calls not listed here) may be documented in the
  358. newlib texinfo documentation.
  359.  
  360.    Calls are implemented on both Windows 95 and NT unless otherwise
  361. noted.  Included are references to relevant standards, if any.  Calls
  362. starting with "cygwin_" are Cygwin-specific calls.
  363.  
  364. ANSI C Library Functions
  365. ========================
  366.  
  367.    `' libc stdio (newlib/libc/stdio)
  368.         `' clearerr: C 4.9.10.1
  369.  
  370.         `' fclose: C 4.9.5.1, P 8.2.3.2
  371.  
  372.         `' feof: C 4.9.10.2
  373.  
  374.         `' ferror: C 4.9.10.3
  375.  
  376.         `' fflush: C 4.9.5.2, P 8.2.3.4
  377.  
  378.         `' fgetc: C 4.9.7.1, P 8.2.3.5
  379.  
  380.         `' fgetpos: C 4.9.9.1
  381.  
  382.         `' fgets: C 4.9.7.2, P 8.2.3.5
  383.  
  384.         `' fopen: C 4.9.5.3, P 8.2.3.1
  385.  
  386.         `' fprintf: C 4.9.7.3, P 8.2.3.6
  387.  
  388.         `' fputc: C 4.9.7.3, P 8.2.3.6
  389.  
  390.         `' fputs: C 4.9.7.4, P 8.2.3.6
  391.  
  392.         `' fread: C 4.9.8.1, P 8.2.3.5
  393.  
  394.         `' freopen: C 4.9.5.4, P 8.2.3.3
  395.  
  396.         `' fscanf: C 4.9.6.2, P 8.2.3.7
  397.  
  398.         `' fseek: C 4.9.9.2, P 8.2.3.7
  399.  
  400.         `' fsetpos: C 4.9.9.3
  401.  
  402.         `' ftell: C 4.9.9.4, P 8.2.3.10
  403.  
  404.         `' fwrite: C 4.9.8.2, P 8.2.3.6
  405.  
  406.         `' getc: C 4.9.7.5, P 8.2.3.5
  407.  
  408.         `' getchar: C 4.9.7.6, P 8.2.3.5
  409.  
  410.         `' gets: C 4.9.7.7, P 8.2.3.5
  411.  
  412.         `' perror: C 4.9.10.4, P 8.2.3.8
  413.  
  414.         `' printf: C 4.9.6.3, P 8.2.3.6
  415.  
  416.         `' putc: C 4.9.7.8, P 8.2.3.6
  417.  
  418.         `' putchar: C 4.9.7.9, P 8.2.3.6
  419.  
  420.         `' puts: C 4.9.7.10, P 8.2.3.6
  421.  
  422.         `' remove: C 4.9.4.1, P 8.2.4
  423.  
  424.         `' rename: C 4.9.4.2, P 5.5.3.1
  425.  
  426.         `' rewind: C 4.9.9.5, P 8.2.3.7
  427.  
  428.         `' scanf: C 4.9.6.4, P 8.2.3.5
  429.  
  430.         `' setbuf: C 4.9.5.5
  431.  
  432.         `' setvbuf: C 4.9.5.6
  433.  
  434.         `' sprintf: C 4.9.6.5
  435.  
  436.         `' sscanf: C 4.9.6.6
  437.  
  438.         `' tmpfile: C 4.9.4.3, P 8.2.3.9
  439.  
  440.         `' tmpnam: C 4.9.4.4, P 8.2.5
  441.  
  442.         `' vfprintf: C 4.9.6.7
  443.  
  444.         `' ungetc: C 4.9.7.11
  445.  
  446.         `' vprintf: C 4.9.6.8
  447.  
  448.         `' vsprintf: C 4.9.6.9
  449.  
  450.    `' libc string (newlib/libc/string)
  451.         `' memchr: C 4.11.5.1
  452.  
  453.         `' memcmp: C 4.11.4.1
  454.  
  455.         `' memcpy: C 4.11.2.1
  456.  
  457.         `' memmove: C 4.11.2.2
  458.  
  459.         `' memset: C 4.11.6.1
  460.  
  461.         `' strcat: C 4.11.3.1
  462.  
  463.         `' strchr: C 4.11.5.2
  464.  
  465.         `' strcmp: C 4.11.4.2
  466.  
  467.         `' strcoll: C 4.11.4.3
  468.  
  469.         `' strcpy: C 4.11.2.3
  470.  
  471.         `' strcspn: C 4.11.5.3
  472.  
  473.         `' strerror: C 4.11.6.2
  474.  
  475.         `' strlen: C 4.11.6.3
  476.  
  477.         `' strncat: C 4.11.3.2
  478.  
  479.         `' strncmp: C 4.11.3.2
  480.  
  481.         `' strncpy: C 4.11.2.4
  482.  
  483.         `' strpbrk: C 4.11.5.4
  484.  
  485.         `' strrchr: C 4.11.5.5
  486.  
  487.         `' strspn: C 4.11.5.6
  488.  
  489.         `' strstr: C 4.11.5.7
  490.  
  491.         `' strtok: C 4.11.5.8
  492.  
  493.         `' strxfrm: C 4.11.4.5
  494.  
  495.    `' libc stdlib (newlib/libc/stdlib, environ.cc,
  496.      newlib/libc/include/machine/setjmp.h newlib/libc/include/assert.h)
  497.         `' abort: C 4.10.4.1, P 8.2.3.12
  498.  
  499.         `' abs: C 4.10.6.1
  500.  
  501.         `' assert: C 4.2.1.1
  502.  
  503.         `' atexit: C 4.10.4.2
  504.  
  505.         `' atof: C 4.10.1.1
  506.  
  507.         `' atoi: C 4.10.1.2
  508.  
  509.         `' atol: C 4.10.1.3
  510.  
  511.         `' bsearch: C 4.10.5.1
  512.  
  513.         `' calloc: C 4.10.3.1
  514.  
  515.         `' div: C 4.10.6.2
  516.  
  517.         `' exit: C 4.10.4.3, P 8.2.3.12
  518.  
  519.         `' free: C 4.10.3.2
  520.  
  521.         `' getenv: C 4.10.4.4, P 4.6.1.1
  522.  
  523.         `' labs: C 4.10.6.3
  524.  
  525.         `' ldiv: C 4.10.6.2
  526.  
  527.         `' longjmp: C 4.6.2.1
  528.  
  529.         `' malloc: C 4.10.3.3
  530.  
  531.         `' mblen: C 4.10.7.1
  532.  
  533.         `' mbstowcs: C 4.10.8.1
  534.  
  535.         `' mbtowc: C 4.10.7.2
  536.  
  537.         `' qsort: 4.10.5.2
  538.  
  539.         `' rand: C 4.10.2.1
  540.  
  541.         `' realloc: C 4.10.3.4
  542.  
  543.         `' setjmp: C 4.6.1.1
  544.  
  545.         `' srand: C 4.10.2.2
  546.  
  547.         `' strtod: C 4.10.1.4
  548.  
  549.         `' strtol: C 4.10.1.5
  550.  
  551.         `' strtoul: C 4.10.1.6
  552.  
  553.         `' system: C 4.10.4.5
  554.  
  555.         `' wcstombs: C 4.10.8.2
  556.  
  557.         `' wctomb: C 4.10.7.3
  558.  
  559.    `' libc time (times.cc, newlib/libc/time)
  560.         `' asctime: C 4.12.3.1
  561.  
  562.         `' gmtime: C 4.12.3.3
  563.  
  564.         `' localtime: C 4.12.3.4, P 8.1.1
  565.  
  566.         `' time: C 4.12.2.4, P 4.5.1.1
  567.  
  568.         `' clock: C 4.12.2.1
  569.  
  570.         `' ctime: C 4.12.3.2
  571.  
  572.         `' difftime: C 4.12.2.2
  573.  
  574.         `' mktime: C 4.12.2.3, P 8.1.1
  575.  
  576.         `' strftime: C 4.11.6.2
  577.  
  578.    `' libc signals (signal.cc, newlib/libc/signal)
  579.         `' raise: C 4.7.2.1
  580.  
  581.         `' signal: C 4.7.1.1
  582.  
  583.    `' libc ctype (newlib/libc/ctype)
  584.         `' isalnum: C 4.3.1.1
  585.  
  586.         `' isalpha: C 4.3.1.2
  587.  
  588.         `' iscntrl: C 4.3.1.3
  589.  
  590.         `' isdigit: C 4.3.1.4
  591.  
  592.         `' isgraph: C 4.3.1.5
  593.  
  594.         `' islower: C 4.3.1.6
  595.  
  596.         `' isprint: C 4.3.1.7
  597.  
  598.         `' ispunct: C 4.3.1.8
  599.  
  600.         `' isspace: C 4.3.1.9
  601.  
  602.         `' isupper: C 4.3.1.10
  603.  
  604.         `' isxdigit: C 4.3.1.11
  605.  
  606.         `' tolower: C 4.3.2.1
  607.  
  608.         `' toupper: C 4.3.2.2
  609.  
  610.    `' libm math (newlib/libm/math)
  611.         `' acos: C 4.5.2.1
  612.  
  613.         `' asin: C 4.5.2.2
  614.  
  615.         `' atan: C 4.5.2.3
  616.  
  617.         `' atan2: C 4.5.2.4
  618.  
  619.         `' ceil: C 4.5.6.1
  620.  
  621.         `' cos: C 4.5.2.5
  622.  
  623.         `' cosh: C 4.5.3.2
  624.  
  625.         `' exp: C 4.5.4.1
  626.  
  627.         `' fabs: C 4.5.6.2
  628.  
  629.         `' floor: C 4.5.6.3
  630.  
  631.         `' fmod: C 4.5.6.4
  632.  
  633.         `' frexp: C 4.5.4.2
  634.  
  635.         `' ldexp: C 4.5.4.3
  636.  
  637.         `' log: C 4.5.4.4
  638.  
  639.         `' log10: C 4.5.4.5
  640.  
  641.         `' modf: C 4.5.4.6
  642.  
  643.         `' pow: C 4.5.5.1
  644.  
  645.         `' sin: C 4.5.2.6
  646.  
  647.         `' sinh: C 4.5.3.2
  648.  
  649.         `' sqrt: C 4.5.5.2
  650.  
  651.         `' tan: C 4.5.2.7
  652.  
  653.         `' tanh: C 4.5.3.3
  654.  
  655.    `' libc misc (newlib/libc/locale, gcc/ginclude/stdarg.h)
  656.         `' localeconv: C 4.4.2.1
  657.  
  658.         `' setlocale: C 4.4.1.1, P 8.1.2.1
  659.  
  660.         `' va_arg: C 4.8.1.2
  661.  
  662.         `' va_end: C 4.8.1.3
  663.  
  664.         `' va_start: C 4.8.1.1
  665.  
  666. POSIX.1/96 Functions
  667. ====================
  668.  
  669.    `' Process Primitives (Section 3)
  670.         `' fork: P 3.1.1.1
  671.  
  672.         `' execl: P 3.1.2.1
  673.  
  674.         `' execle: P 3.1.2.1
  675.  
  676.         `' execlp: P 3.1.2.1
  677.  
  678.         `' execv: P 3.1.2.1
  679.  
  680.         `' execve: P 3.1.2.1
  681.  
  682.         `' execvp: P 3.1.2.1
  683.  
  684.         `' pthread_atfork: P96 3.1.3.1 - unimplemented
  685.  
  686.         `' wait: P 3.2.1.1
  687.  
  688.         `' waitpid: P 3.2.1.1
  689.  
  690.         `' _exit: P 3.2.2.1
  691.  
  692.         `' kill: P 3.3.2.1
  693.  
  694.         `' sigemptyset: P 3.3.3.1
  695.  
  696.         `' sigfillset: P 3.3.3.1
  697.  
  698.         `' sigaddset: P 3.3.3.1
  699.  
  700.         `' sigdelset: P 3.3.3.1
  701.  
  702.         `' sigismember: P 3.3.3.1
  703.  
  704.         `' sigaction: P 3.3.4.1
  705.  
  706.         `' pthread_sigmask: P96 3.3.5.1
  707.  
  708.         `' sigprocmask: P 3.3.5.1
  709.  
  710.         `' sigpending: P 3.3.6.1
  711.  
  712.         `' sigsuspend: P 3.3.7.1
  713.  
  714.         `' sigwait: P96 3.3.8.1 - unimplemented
  715.  
  716.         `' sigwaitinfo: P96 3.3.8.1 - unimplemented
  717.  
  718.         `' sigtimedwait: P96 3.3.8.1 - unimplemented
  719.  
  720.         `' sigqueue: P96 3.3.9.1 - unimplemented
  721.  
  722.         `' pthread_kill: P96 3.3.10.1 - unimplemented
  723.  
  724.         `' alarm: P 3.4.1.1
  725.  
  726.         `' pause: P 3.4.2.1
  727.  
  728.         `' sleep: P 3.4.3.1
  729.  
  730.    `' Process Environment (Section 4)
  731.         `' getpid: P 4.1.1.1
  732.  
  733.         `' getppid: P 4.1.1.1
  734.  
  735.         `' getuid: P 4.2.1.1
  736.  
  737.         `' geteuid: P 4.2.1.1
  738.  
  739.         `' getgid: P 4.2.1.1
  740.  
  741.         `' getegid: P 4.2.1.1
  742.  
  743.         `' setuid: P 4.2.2.1 (stub, sets ENOSYS, returns zero)
  744.  
  745.         `' setgid: P 4.2.2.1 (stub, sets ENOSYS, returns zero)
  746.  
  747.         `' getgroups: P 4.2.3.1
  748.  
  749.         `' getlogin: P 4.2.4.1
  750.  
  751.         `' getlogin_r: P 4.2.4.1 - unimplemented
  752.  
  753.         `' getpgrp: P 4.3.1.1
  754.  
  755.         `' setsid: P 4.3.2.1
  756.  
  757.         `' setpgid: P 4.3.3.1
  758.  
  759.         `' uname: P 4.4.1.1
  760.  
  761.         `' time: C 4.12.2.4, P 4.5.1.1
  762.  
  763.         `' times: P 4.5.2.1
  764.  
  765.         `' getenv: C 4.10.4.4, P 4.6.1.1
  766.  
  767.         `' ctermid: P 4.7.1.1
  768.  
  769.         `' ttyname: P 4.7.2.1
  770.  
  771.         `' ttyname_r: P 4.7.2.1 - unimplemented
  772.  
  773.         `' isatty: P 4.7.2.1
  774.  
  775.         `' sysconf: P 4.8.1.1
  776.  
  777.    `' Files and Directories (Section 5)
  778.         `' opendir: P 5.1.2.1
  779.  
  780.         `' readdir: P 5.1.2.1
  781.  
  782.         `' readdir_r: P96 5.1.2.1 - unimplemented
  783.  
  784.         `' rewinddir: P 5.1.2.1
  785.  
  786.         `' closedir: P 5.1.2.1
  787.  
  788.         `' chdir: P 5.2.1.1
  789.  
  790.         `' getcwd: P 5.2.2.1
  791.  
  792.         `' open: P 5.3.1.1
  793.  
  794.         `' creat: P 5.3.2.1
  795.  
  796.         `' umask: P 5.3.3.1
  797.  
  798.         `' link: P 5.3.4.1 (copy file in Win 95, and when link fails in
  799.           NT)
  800.  
  801.         `' mkdir: P 5.4.1.1
  802.  
  803.         `' mkfifo: P 5.4.2.1 - unimplemented!!!
  804.  
  805.         `' unlink: P 5.5.1.1
  806.  
  807.         `' rmdir: P 5.5.2.1
  808.  
  809.         `' rename: C 4.9.4.2, P 5.5.3.1
  810.  
  811.         `' stat: P 5.6.2.1
  812.  
  813.         `' fstat: P 5.6.2.1
  814.  
  815.         `' access: P 5.6.3.1
  816.  
  817.         `' chmod: P 5.6.4.1
  818.  
  819.         `' fchmod: P96 5.6.4.1
  820.  
  821.         `' chown: P 5.6.5.1 (stub in Win 95; always returns zero)
  822.  
  823.         `' utime: P 5.6.6.1
  824.  
  825.         `' ftruncate: P96 5.6.7.1
  826.  
  827.         `' pathconf: P 5.7.1.1
  828.  
  829.         `' fpathconf: P 5.7.1.1
  830.  
  831.    `' Input and Output Primitives (Section 6)
  832.         `' pipe: P 6.1.1.1
  833.  
  834.         `' dup: P 6.2.1.1
  835.  
  836.         `' dup2: P 6.2.1.1
  837.  
  838.         `' close: P 6.3.1.1
  839.  
  840.         `' read: P 6.4.1.1
  841.  
  842.         `' write: P 6.4.2.1
  843.  
  844.         `' fcntl: P 6.5.2.1 (note: fcntl(fd, F_GETLK,...) is not
  845.           implemented (returns -1 with errno set to ENOSYS)).
  846.  
  847.         `' lseek: P 6.5.3.1 (note: only works correctly on binary files)
  848.  
  849.         `' fsync: P96 6.6.1.1
  850.  
  851.         `' fdatasync: P96 6.6.2.1 - unimplemented
  852.  
  853.         `' aio_read: P96 6.7.2.1 - unimplemented
  854.  
  855.         `' aio_write: P96 6.7.3.1 - unimplemented
  856.  
  857.         `' lio_listio: P96 6.7.4.1 - unimplemented
  858.  
  859.         `' aio_error: P96 6.7.5.1 - unimplemented
  860.  
  861.         `' aio_return: P96 6.7.6.1 - unimplemented
  862.  
  863.         `' aio_cancel: P96 6.7.7.1 - unimplemented
  864.  
  865.         `' aio_suspend: P96 6.7.8.1 - unimplemented
  866.  
  867.         `' aio_fsync: P96 6.7.9.1 - unimplemented
  868.  
  869.    `' Device- and Class-Specific Functions (Section 7)
  870.         `' cfgetispeed: P96 7.1.3.1
  871.  
  872.         `' cfgetospeed: P96 7.1.3.1
  873.  
  874.         `' cfsetispeed: P96 7.1.3.1
  875.  
  876.         `' cfsetospeed: P96 7.1.3.1
  877.  
  878.         `' tcdrain: P 7.2.2.1
  879.  
  880.         `' tcflow: P 7.2.2.1
  881.  
  882.         `' tcflush: P 7.2.2.1
  883.  
  884.         `' tcgetattr: P96 7.2.1.1
  885.  
  886.         `' tcgetpgrp: P 7.2.3.1
  887.  
  888.         `' tcsendbreak: P 7.2.2.1
  889.  
  890.         `' tcsetattr: P96 7.2.1.1
  891.  
  892.         `' tcsetpgrp: P 7.2.4.1
  893.  
  894.    `' Language-Specific Services for the C Programming Language
  895.      (Section 8)
  896.         `' abort: C 4.10.4.1, P 8.2.3.12
  897.  
  898.         `' asctime_r: P96 8.3.4.1 - unimplemented
  899.  
  900.         `' ctime_r: P96 8.3.5.1 - unimplemented
  901.  
  902.         `' exit: C 4.10.4.3, P 8.2.3.12
  903.  
  904.         `' fclose: C 4.9.5.1, P 8.2.3.2
  905.  
  906.         `' fdopen: P 8.2.2.1
  907.  
  908.         `' fflush: C 4.9.5.2, P 8.2.3.4
  909.  
  910.         `' fgetc: C 4.9.7.1, P 8.2.3.5
  911.  
  912.         `' fgets: C 4.9.7.2, P 8.2.3.5
  913.  
  914.         `' fileno: P 8.2.1.1
  915.  
  916.         `' flockfile: P96 8.2.6.1 - unimplemented
  917.  
  918.         `' fopen: C 4.9.5.3, P 8.2.3.1
  919.  
  920.         `' fprintf: C 4.9.7.3, P 8.2.3.6
  921.  
  922.         `' fputc: C 4.9.7.3, P 8.2.3.6
  923.  
  924.         `' fputs: C 4.9.7.4, P 8.2.3.6
  925.  
  926.         `' fread: C 4.9.8.1, P 8.2.3.5
  927.  
  928.         `' freopen: C 4.9.5.4, P 8.2.3.3
  929.  
  930.         `' fscanf: C 4.9.6.2, P 8.2.3.7
  931.  
  932.         `' fseek: C 4.9.9.2, P 8.2.3.7
  933.  
  934.         `' ftell: C 4.9.9.4, P 8.2.3.10
  935.  
  936.         `' ftrylockfile: P96 8.2.6.1 - unimplemented
  937.  
  938.         `' funlockfile: P96 8.2.6.1 - unimplemented
  939.  
  940.         `' fwrite: C 4.9.8.2, P 8.2.3.6
  941.  
  942.         `' getc: C 4.9.7.5, P 8.2.3.5
  943.  
  944.         `' getc_unlocked: P96 8.2.7.1 - unimplemented
  945.  
  946.         `' getchar: C 4.9.7.6, P 8.2.3.5
  947.  
  948.         `' getchar_unlocked: P96 8.2.7.1 - unimplemented
  949.  
  950.         `' gets: C 4.9.7.7, P 8.2.3.5
  951.  
  952.         `' gmtime_r: P96 8.3.6.1 - unimplemented
  953.  
  954.         `' localtime_r: P96 8.3.7.1 - unimplemented
  955.  
  956.         `' perror: C 4.9.10.4, P 8.2.3.8
  957.  
  958.         `' printf: C 4.9.6.3, P 8.2.3.6
  959.  
  960.         `' putc: C 4.9.7.8, P 8.2.3.6
  961.  
  962.         `' putc_unlocked: P96 8.2.7.1 - unimplemented
  963.  
  964.         `' putchar: C 4.9.7.9, P 8.2.3.6
  965.  
  966.         `' putchar_unlocked: P96 8.2.7.1 - unimplemented
  967.  
  968.         `' puts: C 4.9.7.10, P 8.2.3.6
  969.  
  970.         `' rand_r: P96 8.3.8.1 - unimplemented
  971.  
  972.         `' remove: C 4.9.4.1, P 8.2.4
  973.  
  974.         `' rewind: C 4.9.9.5, P 8.2.3.7
  975.  
  976.         `' scanf: C 4.9.6.4, P 8.2.3.5
  977.  
  978.         `' setlocale: C 4.4.1.1, P 8.1.2.1
  979.  
  980.         `' siglongjmp: P 8.3.1.1
  981.  
  982.         `' sigsetjmp: P 8.3.1.1
  983.  
  984.         `' strtok_r: P96 8.3.3.1 - unimplemented
  985.  
  986.         `' tmpfile: C 4.9.4.3, P 8.2.3.9
  987.  
  988.         `' tmpnam: C 4.9.4.4, P 8.2.5
  989.  
  990.         `' tzset: P 8.3.2.1
  991.  
  992.    `' System Databases (Section 9)
  993.         `' getgrgid: P 9.2.1.1
  994.  
  995.         `' getgrgid_r: P96 9.2.1.1 - unimplemented
  996.  
  997.         `' getgrnam: P 9.2.1.1
  998.  
  999.         `' getgrnam_r: P96 9.2.1.1 - unimplemented
  1000.  
  1001.         `' getpwnam: P 9.2.2.1
  1002.  
  1003.         `' getpwnam_r: P96 9.2.2.1 - unimplemented
  1004.  
  1005.         `' getpwuid: P 9.2.2.1
  1006.  
  1007.         `' getpwuid_r: P96 9.2.2.1 - unimplemented
  1008.  
  1009.    `' Synchronization (Section 11)
  1010.         `' pthread_cond_broadcast: P96 11.4.3.1 - unimplemented
  1011.  
  1012.         `' pthread_cond_destroy: P96 11.4.2.1 - unimplemented
  1013.  
  1014.         `' pthread_cond_init: P96 11.4.2.1 - unimplemented
  1015.  
  1016.         `' pthread_cond_signal: P96 11.4.3.1 - unimplemented
  1017.  
  1018.         `' pthread_cond_timedwait: P96 11.4.4.1 - unimplemented
  1019.  
  1020.         `' pthread_cond_wait: P96 11.4.4.1 - unimplemented
  1021.  
  1022.         `' pthread_condattr_destroy: P96 11.4.1.1 - unimplemented
  1023.  
  1024.         `' pthread_condattr_getpshared: P96 11.4.1.1 - unimplemented
  1025.  
  1026.         `' pthread_condattr_init: P96 11.4.1.1 - unimplemented
  1027.  
  1028.         `' pthread_condattr_setpshared: P96 11.4.1.1 - unimplemented
  1029.  
  1030.         `' pthread_mutex_destroy: P96 11.3.2.1 - unimplemented
  1031.  
  1032.         `' pthread_mutex_init: P96 11.3.2.1 - unimplemented
  1033.  
  1034.         `' pthread_mutex_lock: P96 11.3.3.1 - unimplemented
  1035.  
  1036.         `' pthread_mutex_trylock: P96 11.3.3.1 - unimplemented
  1037.  
  1038.         `' pthread_mutex_unlock: P96 11.3.3.1 - unimplemente
  1039.  
  1040.         `' sem_close: P96 11.2.4.1 - unimplemented
  1041.  
  1042.         `' sem_destroy: P96 11.2.2.1 - unimplemented
  1043.  
  1044.         `' sem_getvalue: P96 11.2.8.1 - unimplemented
  1045.  
  1046.         `' sem_init: P96 11.2.1.1 - unimplemented
  1047.  
  1048.         `' sem_open: P96 11.2.3.1 - unimplemented
  1049.  
  1050.         `' sem_post: P96 11.2.7.1 - unimplemented
  1051.  
  1052.         `' sem_trywait: P96 11.2.6.1 - unimplemented
  1053.  
  1054.         `' sem_unlink: P96 11.2.5.1 - unimplemented
  1055.  
  1056.         `' sem_wait: P96 11.2.6.1 - unimplemented
  1057.  
  1058.    `' Memory Management (Section 12)
  1059.         `' mlock: P96 12.1.2.1 - unimplemented
  1060.  
  1061.         `' mlockall: P96 12.1.1.1 - unimplemented
  1062.  
  1063.         `' mmap: P96 12.2.1.1
  1064.  
  1065.         `' mprotect: P96 12.2.3.1
  1066.  
  1067.         `' msync: P96 12.2.4.1
  1068.  
  1069.         `' munlock: P96 12.1.2.1 - unimplemented
  1070.  
  1071.         `' munlockall: P96 12.1.1.1 - unimplemented
  1072.  
  1073.         `' munmap: P96 12.2.2.1
  1074.  
  1075.         `' shm_open: P96 12.3.1.1 - unimplemented
  1076.  
  1077.         `' shm_unlink: P96 12.3.2.1 - unimplemented
  1078.  
  1079.    `' Execution Scheduling (Section 13)
  1080.         `' pthread_attr_getinheritsched: P96 13.5.1.1 - unimplemented
  1081.  
  1082.         `' pthread_attr_getschedparam: P96 13.5.1.1 - unimplemented
  1083.  
  1084.         `' pthread_attr_getschedpolicy: P96 13.5.1.1 - unimplemented
  1085.  
  1086.         `' pthread_attr_getscope: P96 13.5.1.1 - unimplemented
  1087.  
  1088.         `' pthread_attr_setinheritsched: P96 13.5.1.1 - unimplemented
  1089.  
  1090.         `' pthread_attr_setschedparam: P96 13.5.1.1 - unimplemented
  1091.  
  1092.         `' pthread_attr_setschedpolicy: P96 13.5.1.1 - unimplemented
  1093.  
  1094.         `' pthread_attr_setscope: P96 13.5.1.1 - unimplemented
  1095.  
  1096.         `' pthread_getschedparam: P96 13.5.2.1 - unimplemented
  1097.  
  1098.         `' pthread_mutex_getprioceiling: P96 13.6.2.1 - unimplemented
  1099.  
  1100.         `' pthread_mutex_setprioceiling: P96 13.6.2.1 - unimplemented
  1101.  
  1102.         `' pthread_mutexattr_getprioceiling: P96 13.6.1.1 -
  1103.           unimplemented
  1104.  
  1105.         `' pthread_mutexattr_getprotocol: P96 13.6.1.1 - unimplemented
  1106.  
  1107.         `' pthread_mutexattr_setprioceiling: P96 13.6.1.1 -
  1108.           unimplemented
  1109.  
  1110.         `' pthread_mutexattr_setprotocol: P96 13.6.1.1 - unimplemented
  1111.  
  1112.         `' pthread_setschedparam: P96 13.5.2.1 - unimplemented
  1113.  
  1114.         `' sched_get_priority_max: P96 13.3.6.1 - unimplemented
  1115.  
  1116.         `' sched_get_priority_min: P96 13.3.6.1 - unimplemented
  1117.  
  1118.         `' sched_getparam: P96 13.3.2.1 - unimplemented
  1119.  
  1120.         `' sched_getscheduler: P96 13.3.4.1 - unimplemented
  1121.  
  1122.         `' sched_rr_get_interval: P96 13.3.6.1 - unimplemented
  1123.  
  1124.         `' sched_setparam: P96 13.3.1.1 - unimplemented
  1125.  
  1126.         `' sched_setscheduler: P96 13.3.3.1 - unimplemented
  1127.  
  1128.         `' sched_yield: P96 13.3.5.1 - unimplemented
  1129.  
  1130.    `' Clocks and Timers (Section 14)
  1131.         `' clock_getres: P96 14.2.1.1 - unimplemented
  1132.  
  1133.         `' clock_gettime: P96 14.2.1.1 - unimplemented
  1134.  
  1135.         `' clock_settime: P96 14.2.1.1 - unimplemented
  1136.  
  1137.         `' nanosleep: P96 14.2.5.1 - unimplemented
  1138.  
  1139.         `' timer_create: P96 14.2.2.1 - unimplemented
  1140.  
  1141.         `' timer_delete: P96 14.2.3.1 - unimplemented
  1142.  
  1143.         `' timer_getoverrun: P96 14.2.4.1 - unimplemented
  1144.  
  1145.         `' timer_gettime: P96 14.2.4.1 - unimplemented
  1146.  
  1147.         `' timer_settime: P96 14.2.4.1 - unimplemented
  1148.  
  1149.    `' Message Passing (Section 15)
  1150.         `' mq_close: P96 15.2.2.1 - unimplemented
  1151.  
  1152.         `' mq_getattr: P96 15.2.8.1 - unimplemented
  1153.  
  1154.         `' mq_notify: P96 15.2.6.1 - unimplemented
  1155.  
  1156.         `' mq_open: P96 15.2.1.1 - unimplemented
  1157.  
  1158.         `' mq_receive: P96 15.2.5.1 - unimplemented
  1159.  
  1160.         `' mq_send: P96 15.2.4.1 - unimplemented
  1161.  
  1162.         `' mq_setattr: P96 15.2.7.1 - unimplemented
  1163.  
  1164.         `' mq_unlink: P96 15.2.3.1 - unimplemented
  1165.  
  1166.    `' Thread Management (Section 16)
  1167.         `' pthread_attr_destroy: P96 16.2.1.1 - unimplemented
  1168.  
  1169.         `' pthread_attr_getdetachstate: P96 16.2.1.1 - unimplemented
  1170.  
  1171.         `' pthread_attr_getstackaddr: P96 16.2.1.1 - unimplemented
  1172.  
  1173.         `' pthread_attr_getstacksize: P96 16.2.1.1 - unimplemented
  1174.  
  1175.         `' pthread_attr_init: P96 16.2.1.1 - unimplemented
  1176.  
  1177.         `' pthread_attr_setdetachstate: P96 16.2.1.1 - unimplemented
  1178.  
  1179.         `' pthread_attr_setstackaddr: P96 16.2.1.1 - unimplemented
  1180.  
  1181.         `' pthread_attr_setstacksize: P96 16.2.1.1 - unimplemented
  1182.  
  1183.         `' pthread_create: P96 16.2.2.1 - unimplemented
  1184.  
  1185.         `' pthread_detach: P96 16.2.4.1 - unimplemented
  1186.  
  1187.         `' pthread_equal: P96 16.2.7.1 - unimplemented
  1188.  
  1189.         `' pthread_exit: P96 16.2.5.1 - unimplemented
  1190.  
  1191.         `' pthread_join: P96 16.2.3.1 - unimplemented
  1192.  
  1193.         `' pthread_once: P96 16.2.8.1 - unimplemented
  1194.  
  1195.         `' pthread_self: P96 16.2.6.1 - unimplemented
  1196.  
  1197.    `' Thread-Specific Data (Section 17)
  1198.         `' pthread_getspecific: P96 17.1.2.1 - unimplemented
  1199.  
  1200.         `' pthread_key_create: P96 17.1.1.1 - unimplemented
  1201.  
  1202.         `' pthread_key_delete: P96 17.1.3.1 - unimplemented
  1203.  
  1204.         `' pthread_setspecific: P96 17.1.2.1 - unimplemented
  1205.  
  1206.    `' Thread Cancellation (Section 18)
  1207.         `' pthread_cancel: P96 18.2.1.1 - unimplemented
  1208.  
  1209.         `' pthread_cleanup_pop: P96 18.2.3.1 - unimplemented
  1210.  
  1211.         `' pthread_cleanup_push: P96 18.2.3.1 - unimplemented
  1212.  
  1213.         `' pthread_setcancelstate: P96 18.2.2.1 - unimplemented
  1214.  
  1215.         `' pthread_setcanceltype: P96 18.2.2.1 - unimplemented
  1216.  
  1217.         `' pthread_testcancel: P96 18.2.2.1 - unimplemented
  1218.  
  1219. Misc Functions
  1220. ==============
  1221.  
  1222.    `' Networking (net.cc) (standardized by POSIX 1.g, which is probably
  1223.      still in draft?)
  1224.         `' accept
  1225.  
  1226.         `' bind
  1227.  
  1228.         `' connect
  1229.  
  1230.         `' getdomainname
  1231.  
  1232.         `' gethostbyaddr
  1233.  
  1234.         `' gethostbyname
  1235.  
  1236.         `' getpeername
  1237.  
  1238.         `' getprotobyname
  1239.  
  1240.         `' getprotobynumber
  1241.  
  1242.         `' getservbyname
  1243.  
  1244.         `' getservbyport
  1245.  
  1246.         `' getsockname
  1247.  
  1248.         `' getsockopt
  1249.  
  1250.         `' herror
  1251.  
  1252.         `' htonl
  1253.  
  1254.         `' htons
  1255.  
  1256.         `' inet_addr
  1257.  
  1258.         `' inet_makeaddr
  1259.  
  1260.         `' inet_netof
  1261.  
  1262.         `' inet_ntoa
  1263.  
  1264.         `' listen
  1265.  
  1266.         `' ntohl
  1267.  
  1268.         `' ntohs
  1269.  
  1270.         `' rcmd
  1271.  
  1272.         `' recv
  1273.  
  1274.         `' recvfrom
  1275.  
  1276.         `' rexec
  1277.  
  1278.         `' rresvport
  1279.  
  1280.         `' send
  1281.  
  1282.         `' sendto
  1283.  
  1284.         `' setsockopt
  1285.  
  1286.         `' shutdown
  1287.  
  1288.         `' socket
  1289.  
  1290.         `' socketpair
  1291.  
  1292.      Of these networking calls, rexec, rcmd and rresvport are
  1293.      implemented in MS IP stack but may not be implemented in other
  1294.      vendors' stacks.
  1295.  
  1296.    `' Other
  1297.         `' chroot (stub, sets ENOSYS, returns -1)
  1298.  
  1299.         `' closelog
  1300.  
  1301.         `' cwait
  1302.  
  1303.         `' cygwin_conv_to_full_posix_path
  1304.  
  1305.         `' cygwin_conv_to_full_win32_path
  1306.  
  1307.         `' cygwin_conv_to_posix_path
  1308.  
  1309.         `' cygwin_conv_to_win32_path
  1310.  
  1311.         `' cygwin_posix_path_list_p
  1312.  
  1313.         `' cygwin_posix_to_win32_path_list
  1314.  
  1315.         `' cygwin_posix_to_win32_path_list_buf_size
  1316.  
  1317.         `' cygwin_split_path
  1318.  
  1319.         `' cygwin_win32_to_posix_path_list
  1320.  
  1321.         `' cygwin_win32_to_posix_path_list_buf_size
  1322.  
  1323.         `' cygwin_winpid_to_pid
  1324.  
  1325.         `' dlclose
  1326.  
  1327.         `' dlerror
  1328.  
  1329.         `' dlfork
  1330.  
  1331.         `' dlopen
  1332.  
  1333.         `' dlsym
  1334.  
  1335.         `' endgrent
  1336.  
  1337.         `' endhostent
  1338.  
  1339.         `' ffs
  1340.  
  1341.         `' fstatfs
  1342.  
  1343.         `' ftime
  1344.  
  1345.         `' get_osfhandle
  1346.  
  1347.         `' getdtablesize
  1348.  
  1349.         `' getgrent
  1350.  
  1351.         `' gethostname
  1352.  
  1353.         `' getitimer
  1354.  
  1355.         `' getmntent
  1356.  
  1357.         `' getpagesize
  1358.  
  1359.         `' getpgid
  1360.  
  1361.         `' getpwent
  1362.  
  1363.         `' gettimeofday: BSD
  1364.  
  1365.         `' grantpt
  1366.  
  1367.         `' initgroups (stub)
  1368.  
  1369.         `' ioctl
  1370.  
  1371.         `' killpg
  1372.  
  1373.         `' login
  1374.  
  1375.         `' logout
  1376.  
  1377.         `' lstat
  1378.  
  1379.         `' mknod (stub, sets ENOSYS, returns -1)
  1380.  
  1381.         `' memccpy
  1382.  
  1383.         `' nice
  1384.  
  1385.         `' openlog
  1386.  
  1387.         `' pclose
  1388.  
  1389.         `' popen
  1390.  
  1391.         `' ptsname
  1392.  
  1393.         `' putenv
  1394.  
  1395.         `' random
  1396.  
  1397.         `' readv
  1398.  
  1399.         `' realpath
  1400.  
  1401.         `' regfree
  1402.  
  1403.         `' rexec
  1404.  
  1405.         `' select
  1406.  
  1407.         `' setegid: SVR4 (stub, sets ENOSYS, returns zero)
  1408.  
  1409.         `' endpwent
  1410.  
  1411.         `' setenv
  1412.  
  1413.         `' seterrno
  1414.  
  1415.         `' seteuid (stub, sets ENOSYS, returns zero)
  1416.  
  1417.         `' sethostent
  1418.  
  1419.         `' setitimer
  1420.  
  1421.         `' setmntent
  1422.  
  1423.         `' setmode
  1424.  
  1425.         `' setpassent
  1426.  
  1427.         `' setpgrp
  1428.  
  1429.         `' setpwent
  1430.  
  1431.         `' settimeofday: BSD (stub, set ENOSYS, return -1)
  1432.  
  1433.         `' sexecl
  1434.  
  1435.         `' sexecle
  1436.  
  1437.         `' sexeclp
  1438.  
  1439.         `' sexeclpe
  1440.  
  1441.         `' sexeclpe
  1442.  
  1443.         `' sexecp
  1444.  
  1445.         `' sexecv
  1446.  
  1447.         `' sexecve
  1448.  
  1449.         `' sexecvpe
  1450.  
  1451.         `' sigpause
  1452.  
  1453.         `' spawnl (spawn calls are from Windows C library)
  1454.  
  1455.         `' spawnle
  1456.  
  1457.         `' spawnlp
  1458.  
  1459.         `' spawnlpe
  1460.  
  1461.         `' spawnv
  1462.  
  1463.         `' spawnve
  1464.  
  1465.         `' spawnvp
  1466.  
  1467.         `' spawnvpe
  1468.  
  1469.         `' srandom
  1470.  
  1471.         `' statfs
  1472.  
  1473.         `' strsignal
  1474.  
  1475.         `' strtosigno
  1476.  
  1477.         `' swab
  1478.  
  1479.         `' syslog
  1480.  
  1481.         `' timezone
  1482.  
  1483.         `' truncate (SVR4/4.3+BSD)
  1484.  
  1485.         `' ttyslot
  1486.  
  1487.         `' unlockpt
  1488.  
  1489.         `' unsetenv
  1490.  
  1491.         `' usleep
  1492.  
  1493.         `' utimes
  1494.  
  1495.         `' vfork: stub that calls fork
  1496.  
  1497.         `' vhangup (stub, sets ENOSYS, returns -1)
  1498.  
  1499.         `' wait3
  1500.  
  1501.         `' wait4
  1502.  
  1503.         `' wcscmp
  1504.  
  1505.         `' wcslen
  1506.  
  1507.         `' wprintf
  1508.  
  1509.         `' writev
  1510.  
  1511. Question and Answers
  1512. ********************
  1513.  
  1514. Where can I get more information?
  1515. =================================
  1516.  
  1517. Where's the documentation?
  1518. --------------------------
  1519.  
  1520.    There are links to quite a lot of it on the main Cygwin project WWW
  1521. page: `http://sourceware.cygnus.com/cygwin/' Be sure to at least read
  1522. the Release Notes on the main WWW page, if there are any.
  1523.  
  1524.    Tool-specific documentation is available at:
  1525. `http://www.cygnus.com/pubs/gnupro/'
  1526.  
  1527. How can I join the Cygwin mailing list?
  1528. ---------------------------------------
  1529.  
  1530.    Send email to
  1531.  
  1532.    gnu-win32-request@cygnus.com
  1533.  
  1534.    with a message body of:
  1535.  
  1536.              subscribe gnu-win32 <your-email-address-here>
  1537.  
  1538.    where <your-email-address-here> is your email address.
  1539.  
  1540.    You can get off the mailing list by sending mail to
  1541.  
  1542.    gnu-win32-request@cygnus.com
  1543.  
  1544.    with a message body of:
  1545.  
  1546.              unsubscribe gnu-win32 <your-email-address-here>
  1547.  
  1548.    Note that because mail sometimes takes a day or two to get delivered
  1549. to the list, there is often a lag of a day or two before you stop
  1550. receiving messages after an unsubscribe request is made.
  1551.  
  1552.    There's an archive of the mailing list in
  1553.  
  1554.    `http://www.cygnus.com/ml/gnu-win32/'
  1555.  
  1556. Why won't you/the mailing list answer my questions?
  1557. ---------------------------------------------------
  1558.  
  1559.    Perhaps your question has an answer that's already in the FAQ.
  1560. Perhaps nobody has time to answer your question.  Perhaps nobody knows
  1561. the answer...
  1562.  
  1563. Installation and Setup
  1564. ======================
  1565.  
  1566. Why is the install of the tools failing?
  1567. ----------------------------------------
  1568.  
  1569.    If you are getting an error message saying "The decompression of %s
  1570. failed.  There may not be enough free disk space in the TEMP
  1571. directory.", read on.
  1572.  
  1573.    InstallShield has a bug where it fails with this message if there
  1574. are more than a certain number of files in your TEMP directory.  You
  1575. can also get this message if you have files in your TEMP dir named the
  1576. same thing InstallShield wishes to name its files (probably from past
  1577. runs of other InstallShield install scripts) which it cannot, for some
  1578. reason, write over.  Perhaps this will be fixed in a future release of
  1579. InstallShield.
  1580.  
  1581.    Until then, clearing out your TEMP directory entirely should do it.
  1582. That will get rid of any files with conflicting names and solve the
  1583. "too many files" problem as well.
  1584.  
  1585. Help! I haven't created /tmp and tools are behaving strangely!
  1586. --------------------------------------------------------------
  1587.  
  1588.    Many Unix tools (bash, byacc, etc.) expect that /tmp always exists.
  1589. This is not guaranteed in Win32 land.  You should create /tmp or "mount"
  1590. the directory of your choice to /tmp to avoid this problem.
  1591.  
  1592. Why does bash spew out "49054596: No such file or directory"?
  1593. -------------------------------------------------------------
  1594.  
  1595.    Are you sure you created a /tmp?  The bash shell will print a
  1596. warning if it doesn't find a /tmp directory.
  1597.  
  1598. How do I set /etc up?
  1599. ---------------------
  1600.  
  1601.    If you want a valid /etc set up (so "ls -l" will display correct
  1602. user information for example) and if you are running NT (preferably
  1603. with an NTFS file system), you should just need to create the /etc
  1604. directory on the filesystem mounted as / and then use mkpasswd and
  1605. mkgroup to create /etc/passwd and /etc/group respectively.  Since
  1606. Windows 95/98's Win32 API is less complete, you're out of luck if
  1607. you're running Windows 95/98.
  1608.  
  1609. Bash says that it can't vfork (or just hangs).  Why?
  1610. ----------------------------------------------------
  1611.  
  1612.    Most often this is because it can't find itself in the path.  Make
  1613. sure that your path includes the directory where bash lives, before you
  1614. start it.
  1615.  
  1616.    Also make sure you have a valid `/bin/sh.exe'.  If you get errors
  1617. like 'no such file or directory' when you're trying to run a shell
  1618. script, which you know is there, then your problem is probably that bash
  1619. can't find `/bin/sh'.
  1620.  
  1621. How can I get bash to read my .bashrc file on startup?
  1622. ------------------------------------------------------
  1623.  
  1624.    Your .bashrc is read from your home directory specified by the HOME
  1625. environment variable.  It uses c:\ if HOME is not set.  So you need to
  1626. set HOME correctly, or move your .bashrc to c:\.
  1627.  
  1628. Can I use paths/filenames containing spaces in them?
  1629. ----------------------------------------------------
  1630.  
  1631.    Cygwin does support spaces in filenames and paths.  That said, some
  1632. utilities that use the library may not, since files don't typically
  1633. contain spaces in Unix.  If you stumble into problems with this, you
  1634. will need to either fix the utilities or stop using spaces in filenames
  1635. used by Cygwin tools.
  1636.  
  1637. Why can't I cd into a shortcut to a directory?
  1638. ----------------------------------------------
  1639.  
  1640.    Cygwin does not follow MS Windows Explorer Shortcuts (*.lnk files)
  1641. yet.  It sees a shortcut as a regular file and this you cannot "cd"
  1642. into it.
  1643.  
  1644.    Some people have suggested replacing the current symbolic link scheme
  1645. with shortcuts.  The major problem with this is that .LNK files would
  1646. then be used to symlink Cygwin paths that may or may not be valid under
  1647. native Win32 non-Cygwin applications such as Explorer.
  1648.  
  1649. I'm having basic problems with find.  Why?
  1650. ------------------------------------------
  1651.  
  1652.    Make sure you are using the find that came with the Cygwin tools and
  1653. that you aren't picking up the Win32 find command instead.  You can
  1654. verify that you are getting the right one by doing a "type find" in
  1655. bash.
  1656.  
  1657. Using Cygwin Releases
  1658. =====================
  1659.  
  1660. Why aren't man, groff, etc. included in the betas?
  1661. --------------------------------------------------
  1662.  
  1663.    For obvious reasons, it isn't feasible for us to maintain and provide
  1664. binary distributions of every tool ported to work with the Cygwin
  1665. tools.  Instead I think Cygnus should concentrate its efforts on the
  1666. Cygwin library and the core development tools.  It's likely that a man
  1667. command will get added once we get it working to our satisfaction.
  1668.  
  1669.    Other tools that have been ported should have their changes added to
  1670. the official releases so they can be compiled straight from normal
  1671. sources for that tool.  In cases where that isn't possible, someone
  1672. else (possibly Cygnus if that made sense) could maintain the diffs and
  1673. have them up for ftp.  Maybe we could keep a list of such tools on the
  1674. Cygwin Web site...
  1675.  
  1676. Where can I find "less"?
  1677. ------------------------
  1678.  
  1679.    The less pager binary is available for the first time in the 20.1
  1680. release.  You will get it if you upgrade.  It is also available from
  1681. various ftp locations on the Net.  Search the mailing list archives for
  1682. the details.
  1683.  
  1684. Where can I find "more"?
  1685. ------------------------
  1686.  
  1687.    If you are looking for the "more" pager, you should use the "less"
  1688. pager instead.  See the last question and answer for more information.
  1689.  
  1690. Where can I find "which"?
  1691. -------------------------
  1692.  
  1693.    While we don't include a which command, you can use the bash built
  1694. in "type" command which does something fairly similar.
  1695.  
  1696. How can I access other drives?
  1697. ------------------------------
  1698.  
  1699.    The best way is to use the "mount" command to mount the drive letter
  1700. so that you can refer to it with only single slashes:
  1701.  
  1702.      bash$ mkdir /c
  1703.      bash$ mount c:/ /c
  1704.      bash$ ls /c
  1705.      ....
  1706.  
  1707.    This is done with textual substitution whenever a file is opened.
  1708. So if you're going to do `ls /c/bar' on a mount like the above the guts
  1709. will turn that into `ls c:/bar'.
  1710.  
  1711.    Note that you only need to mount drives once.  The mapping is kept
  1712. in the registry so mounts stay valid pretty much indefinitely.  You can
  1713. only get rid of them with umount (or the registry editor).
  1714.  
  1715.    The '-b' option to mount mounts the mountpoint in binary mode where
  1716. text and binary files are treated equivalently.  This should only be
  1717. necessary for badly ported Unix programs where binary flags are missing
  1718. from open calls.
  1719.  
  1720.    Since the beta 16 release, we also support a special means of
  1721. accessing other drive letters without using the `mount' command.  This
  1722. support may disappear in a future Cygwin release because of the
  1723. collision between this scheme and UNC pathname support (one character
  1724. machine names don't work currently).
  1725.  
  1726.    To do an "ls" on drive letter f:, do the following:
  1727.  
  1728.      bash$ ls //f/
  1729.  
  1730.    Note that you can also access UNC paths in the standard way.
  1731. Because of the drive letter shortcut mentioned above, machine names in
  1732. UNC paths must be more than one character long.
  1733.  
  1734. What does "mount failed: Device or resource busy" mean?
  1735. -------------------------------------------------------
  1736.  
  1737.    This usually means that you are trying to mount to a location
  1738. already in use by mount.  For example, if c: is mounted as '/' and you
  1739. try to mount d: there as well, you will get this error message.  First
  1740. "umount" the old location, then "mount" the new one and you should have
  1741. better luck.
  1742.  
  1743.    If you are trying to umount '/' and are getting this message, you may
  1744. need to run `regedit.exe' and change the "native" key for the '/' mount
  1745. in one of the mount points kept under HKEY_CURRENT_USER/Software/Cygnus
  1746. Solutions/CYGWIN.DLL setup/<version> where <version> is the latest
  1747. registry version associated with the Cygwin library.
  1748.  
  1749. How can I share files between Unix and Windows?
  1750. -----------------------------------------------
  1751.  
  1752.    During development, we have both Unix boxes running Samba and
  1753. NT/Windows 95/98 machines.  We often build with cross-compilers under
  1754. Unix and copy binaries and source to the Windows system or just toy
  1755. with them directly off the Samba-mounted partition.  On dual-boot
  1756. NT/Windows 9x machines, we usually use the FAT filesystem so we can
  1757. also access the files under Windows 9x.
  1758.  
  1759. Are mixed-case filenames possible with Cygwin?
  1760. ----------------------------------------------
  1761.  
  1762.    Several Unix programs expect to be able to use to filenames spelled
  1763. the same way, but with different case.  A prime example of this is
  1764. perl's configuration script, which wants `Makefile' and `makefile'.
  1765. WIN32 can't tell the difference between files with just different case,
  1766. so the configuration fails.
  1767.  
  1768.    In releases prior to beta 16, mount had a special mixed case option
  1769. which renamed files in such a way as to allow mixed case filenames.  We
  1770. chose to remove the support when we rewrote the path handling code for
  1771. beta 16.
  1772.  
  1773. What about DOS special filenames?
  1774. ---------------------------------
  1775.  
  1776.    Files cannot be named com1, lpt1, or aux (to name a few); either as
  1777. the root filename or as the extension part.  If you do, you'll have
  1778. trouble.  Unix programs don't avoid these names which can make things
  1779. interesting.  E.g., the perl distribution has a file called `aux.sh'.
  1780. The perl configuration tries to make sure that `aux.sh' is there, but
  1781. an operation on a file with the magic letters 'aux' in it will hang.
  1782.  
  1783. When it hangs, how do I get it back?
  1784. ------------------------------------
  1785.  
  1786.    If something goes wrong and the tools hang on you for some reason
  1787. (easy to do if you try and read a file called aux.sh), first try
  1788. hitting ^C to return to bash or the cmd prompt.
  1789.  
  1790.    If you start up another shell, and applications don't run, it's a
  1791. good bet that the hung process is still running somewhere.  Use the Task
  1792. Manager, pview, or a similar utility to kill the process.
  1793.  
  1794.    And, if all else fails, there's always the reset button/power switch.
  1795. This should never be necessary under Windows NT.
  1796.  
  1797. Why the weird directory structure?
  1798. ----------------------------------
  1799.  
  1800.    Why are cpp.exe, cc1.exe, etc., not in the bin directory?
  1801.  
  1802.    Why more than one lib and include directory?
  1803.  
  1804.      H-i586-cygwin32\lib\gcc-lib\...\egcs-2.91.57\include
  1805.      x86-cygwin32\include
  1806.      x86-cygwin32\H-i586-cygwin32\i586-cygwin32\include
  1807.  
  1808.    This way multiple releases for different hosts and targets can all
  1809. coexist in the same tree.  H-i586-cygwin32 means hosted on
  1810. i586-cygwin32, common files shared by all hosts are in the top level
  1811. directories, target-specific files are in the
  1812. H-i586-cygwin32/i586-cygwin32 directory, etc...
  1813.  
  1814.    If you had a server sharing files to a ppc NT machine and an x86 NT
  1815. machine, you could have both an H-i586-cygwin32 and an
  1816. H-powerpcle-cygwin32 directory without having to duplicate the top level
  1817. files that are the same for both hosts.  If you built and installed an
  1818. i586-cygwin32 x mips-elf cross-compiler, you would have an
  1819. H-i586-cygwin32/mips-elf with its target-specific files and some
  1820. mips-elf- prefixed binaries in H-i586-cygwin32/bin.
  1821.  
  1822.    Normally we also have another higher level directory that identifies
  1823. the release.  Then multiple Cygwin releases can coexist with different
  1824. dll versions, giving:
  1825.  
  1826.      cygnus/b19/H-i586-cygwin32
  1827.      cygnus/cygwin-b20/H-i586-cygwin32
  1828.      ...
  1829.  
  1830.    In any case, this does add complexity to the directory structure but
  1831. it's worth it for people with more complex installations.
  1832.  
  1833. How do anti-virus programs like Cygwin?
  1834. ---------------------------------------
  1835.  
  1836.    One person reported that McAfee VirusScan for NT (and others?) is
  1837. incompatible with Cygwin.  This is because it tries to scan the newly
  1838. loaded shared memory in the cygwin.dll, which can cause fork()s to
  1839. fail, wreaking havoc on many of the tools.
  1840.  
  1841. Why can't I run bash as a shell under NT Emacs?
  1842. -----------------------------------------------
  1843.  
  1844.    Place the following code in your startup file and try again:
  1845.  
  1846.      (load "comint")
  1847.      (fset 'original-comint-exec-1 (symbol-function 'comint-exec-1))
  1848.      (defun comint-exec-1 (name buffer command switches)
  1849.        (let ((binary-process-input t)
  1850.              (binary-process-output nil))
  1851.          (original-comint-exec-1 name buffer command switches)))
  1852.  
  1853. Where did the man/info pages go?
  1854. --------------------------------
  1855.  
  1856.    In order to save space and download times, we have stopped providing
  1857. the man/info files for the tools with the binary install since we are
  1858. not yet providing a man page or info reader.  Both types of
  1859. documentation are available in a tar file available from the project ftp
  1860. site.  Or consult the online documentation over the WWW.
  1861.  
  1862. Why can't B20's "cygcheck -s" find cpp?
  1863. ---------------------------------------
  1864.  
  1865.    This is a confusingly worded warning that will be reworded in future
  1866. versions.  In fact, cygcheck should normally *not* find cpp; if it does,
  1867. it may be a problem (e.g. it might pick up Borland's cpp, which would
  1868. cause problems).
  1869.  
  1870. Why do I get a message saying Out of Queue slots?
  1871. -------------------------------------------------
  1872.  
  1873.    "Out of queue slots!" generally occurs when you're trying to remove
  1874. many files that you do not have permission to remove (either because
  1875. you don't have permission, they are opened exclusively, etc).  What
  1876. happens is Cygwin queues up these files with the supposition that it
  1877. will be possible to delete these files in the future.  Assuming that
  1878. the permission of an affected file does change later on, the file will
  1879. be deleted as requested.  However, if too many requests come in to
  1880. delete inaccessible files, the queue overflows and you get the message
  1881. you're asking about.  Usually you can remedy this with a quick chmod,
  1882. close of a file, or other such thing.  (Thanks to Larry Hall for this
  1883. explanation).
  1884.  
  1885. Why don't symlinks work on samba-mounted filesystems?
  1886. -----------------------------------------------------
  1887.  
  1888.    Symlinks are marked with "system" file attribute.  Samba does not
  1889. support this attribute.
  1890.  
  1891. Why does df report sizes incorrectly.
  1892. -------------------------------------
  1893.  
  1894.    There is a bug in the Win32 API function GetFreeDiskSpace that makes
  1895. it return incorrect values for disks larger than 2 GB in size.  Perhaps
  1896. that may be your problem?
  1897.  
  1898. Has the screen program been ported yet?
  1899. ---------------------------------------
  1900.  
  1901.    Screen requires either unix domain sockets or fifoes.  Neither of
  1902. them have been implemented in Cygwin yet.
  1903.  
  1904. Cygwin API Questions
  1905. ====================
  1906.  
  1907. How does everything work?
  1908. -------------------------
  1909.  
  1910.    There's a C library which provides a Unix-style API.  The
  1911. applications are linked with it and voila - they run on Windows.
  1912.  
  1913.    The aim is to add all the goop necessary to make your apps run on
  1914. Windows into the C library.  Then your apps should run on Unix and
  1915. Windows with no changes at the source level.
  1916.  
  1917.    The C library is in a DLL, which makes basic applications quite
  1918. small.  And it allows relatively easy upgrades to the Win32/Unix
  1919. translation layer, providing that dll changes stay backward-compatible.
  1920.  
  1921.    For a good overview of Cygwin, you may want to read the paper on
  1922. Cygwin published by the Usenix Association in conjunction with the 2d
  1923. Usenix NT Symposium in August 1998.  It is available in html format on
  1924. the project WWW site.
  1925.  
  1926. Are development snapshots for the Cygwin library available?
  1927. -----------------------------------------------------------
  1928.  
  1929.    Yes.  They're made whenever anything interesting happens inside the
  1930. Cygwin library (usually roughly on a weekly basis, depending on how much
  1931. is going on).  They are only intended for those people who wish to
  1932. contribute code to the project.  If you aren't going to be happy
  1933. debugging problems in a buggy snapshot, avoid these and wait for a real
  1934. release.  The snapshots are available from ftp.cygnus.com in
  1935. /pub/noer/winsup-snapshot/.
  1936.  
  1937. How is the DOS/Unix CR/LF thing handled?
  1938. ----------------------------------------
  1939.  
  1940.    Let's start with some background.
  1941.  
  1942.    In UNIX, a file is a file and what the file contains is whatever the
  1943. program/programmer/user told it to put into it.  In Windows, a file is
  1944. also a file and what the file contains depends not only on the
  1945. program/programmer/user but also the file processing mode.
  1946.  
  1947.    When processing in text mode, certain values of data are treated
  1948. specially.  A \n (new line) written to the file will prepend a \r
  1949. (carriage return) so that if you `printf("Hello\n") you in fact get
  1950. "Hello\r\n".  Upon reading this combination, the \r is removed and the
  1951. number of bytes returned by the read is 1 less than was actually read.
  1952. This tends to confuse programs dependant on ftell() and fseek().  A
  1953. Ctrl-Z encountered while reading a file sets the End Of File flags even
  1954. though it truly isn't the end of file.
  1955.  
  1956.    One of Cygwin's goals is to make it possible to easily mix
  1957. Cygwin-ported Unix programs with generic Windows programs.  As a
  1958. result, Cygwin opens files in text mode as is normal under Windows.  In
  1959. the accompanying tools, tools that deal with binaries (e.g. objdump)
  1960. operate in unix binary mode and tools that deal with text files (e.g.
  1961. bash) operate in text mode.
  1962.  
  1963.    Some people push the notion of globally setting the default
  1964. processing mode to binary via mount point options or by setting the
  1965. CYGWIN32 environment variable.  But that creates a different problem.
  1966. In binary mode, the program receives all of the data in the file,
  1967. including a \r.  Since the programs will no longer deal with these
  1968. properly for you, you would have to remove the \r from the relevant
  1969. text files, especially scripts and startup resource files.  This is a
  1970. porter "cop out", forcing the user to deal with the \r for the porter.
  1971.  
  1972.    It is rather easy for the porter to fix the source code by supplying
  1973. the appropriate file processing mode switches to the open/fopen
  1974. functions.  Treat all text files as text and treat all binary files as
  1975. binary.  To be specific, you can select binary mode by adding
  1976. `O_BINARY' to the second argument of an `open' call, or `"b"' to second
  1977. argument of an `fopen' call.  You can also call `setmode (fd,
  1978. O_BINARY)'.
  1979.  
  1980.    Note that because the open/fopen switches are defined by ANSI, they
  1981. exist under most flavors of Unix; open/fopen will just ignore the switch
  1982. since they have no meaning to UNIX.
  1983.  
  1984.    Also note that `lseek' only works in binary mode.
  1985.  
  1986.    Explanation adapted from mailing list email by Earnie Boyd
  1987. <earnie_boyd@yahoo.com>.
  1988.  
  1989. Is the Cygwin library multi-thread-safe?
  1990. ----------------------------------------
  1991.  
  1992.    Not yet but it soon will be.
  1993.  
  1994.    Cygwin is not multi-thread-safe because:
  1995.  
  1996.    1) Newlib (out libc/libm) isn't reentrant (although it almost is).
  1997. This would have to be fixed or we would have to switch to a libc/libm
  1998. that is reentrant.
  1999.  
  2000.    2) Cygwin locks shared memory areas (shared by multiple processes),
  2001. but the per-process data is not locked.  Thus, different threads in a
  2002. multi-threaded application would have access to it and give rise to
  2003. nasty race-conditions.
  2004.  
  2005.    The Mingw package (what you get when you invoke gcc with
  2006. -mno-cygwin) is multi-thread-safe because that configuration doesn't
  2007. use Cygwin or newlib.  Instead, it uses Microsoft libraries which are
  2008. multi-thread-safe for the most part.  So as long as the programmer
  2009. avoids Microsoft APIs that aren't multi-thread-safe (most are ok), they
  2010. should be fine.
  2011.  
  2012. Why is some functionality only supported in Windows NT?
  2013. -------------------------------------------------------
  2014.  
  2015.    Windows 9x: n.  32 bit extensions and a graphical shell for a 16 bit
  2016. patch to an 8 bit operating system originally coded for a 4 bit
  2017. microprocessor, written by a 2 bit company that can't stand 1 bit of
  2018. competition.
  2019.  
  2020.    But seriously, Windows 9x lacks most of the security-related calls
  2021. and has several other deficiencies with respect to its version of the
  2022. Win32 API.  See the calls.texinfo document for more information as to
  2023. what is not supported in Win 9x.
  2024.  
  2025. How is fork() implemented?
  2026. --------------------------
  2027.  
  2028.    Cygwin fork() essentially works like a non-copy on write version of
  2029. fork() (like old Unix versions used to do).  Because of this it can be
  2030. a little slow.  In most cases, you are better off using the spawn
  2031. family of calls if possible.
  2032.  
  2033.    Here's how fork works as of beta 18:
  2034.  
  2035.    Parent initializes a space in the Cygwin process table for child.
  2036. Parent creates child suspended using Win32 CreateProcess call, giving
  2037. the same path it was invoked with itself.  Parent calls setjmp to save
  2038. its own context and then sets a pointer to this in the Cygwin shared
  2039. memory area (shared among all Cygwin tasks).  Parent fills in the
  2040. childs .data and .bss subsections by copying from its own address space
  2041. into the suspended child's address space.  Parent then starts the
  2042. child.  Parent waits on mutex for child to get to safe point.  Child
  2043. starts and discovers if has been forked and then longjumps using the
  2044. saved jump buffer.  Child sets mutex parent is waiting on and then
  2045. blocks on another mutex waiting for parent to fill in its stack and
  2046. heap.  Parent notices child is in safe area, copies stack and heap from
  2047. itself into child, releases the mutex the child is waiting on and
  2048. returns from the fork call.  Child wakes from blocking on mutex,
  2049. recreates any mmapped areas passed to it via shared area and then
  2050. returns from fork itself.
  2051.  
  2052. How does wildcarding (globbing) work?
  2053. -------------------------------------
  2054.  
  2055.    If an application using CYGWIN.DLL starts up, and can't find the
  2056. `PID' environment variable, it assumes that it has been started from
  2057. the a DOS style command prompt.  This is pretty safe, since the rest of
  2058. the tools (including bash) set PID so that a new process knows what PID
  2059. it has when it starts up.
  2060.  
  2061.    If the DLL thinks it has come from a DOS style prompt, it runs a
  2062. `globber' over the arguments provided on the command line.  This means
  2063. that if you type `LS *.EXE' from DOS, it will do what you might expect.
  2064.  
  2065.    Beware: globbing uses `malloc'.  If your application defines
  2066. `malloc', that will get used.  This may do horrible things to you.
  2067.  
  2068. How do symbolic links work?
  2069. ---------------------------
  2070.  
  2071.    CYGWIN.DLL generates link files with a magic header.  When you open
  2072. a file or directory that is a link to somewhere else, it opens the file
  2073. or directory listed in the magic header.  Because we don't want to have
  2074. to open every referenced file to check symlink status, Cygwin marks
  2075. symlinks with the system attribute.  Files without the system attribute
  2076. are not checked.  Because remote samba filesystems do not support the
  2077. system attribute, symlinks do not work on network drives.
  2078.  
  2079. Why do some files, which are not executables have the 'x' type.
  2080. ---------------------------------------------------------------
  2081.  
  2082.    When working out the unix-style attribute bits on a file, the library
  2083. has to fill out some information not provided by the WIN32 API.
  2084.  
  2085.    It guesses that files ending in .exe and .bat are executable, as are
  2086. ones which have a "#!" as their first characters.
  2087.  
  2088. How secure is Cygwin in a multi-user environment?
  2089. -------------------------------------------------
  2090.  
  2091.    Cygwin is not secure in a multi-user environment.  For example if
  2092. you have a long running daemon such as "inetd" running as admin while
  2093. ordinary users are logged in, or if you have a user logged in remotely
  2094. while another user is logged into the console, one cygwin client can
  2095. trick another into running code for it.  In this way one user may gain
  2096. the priveledge of another cygwin program running on the machine.  This
  2097. is because cygwin has shared state that is accessible by all processes.
  2098.  
  2099.    (Thanks to Tim Newsham (newsham@lava.net) for this explanation).
  2100.  
  2101. How do the net-related functions work?
  2102. --------------------------------------
  2103.  
  2104.    The network support in Cygwin is supposed to provide the Unix API,
  2105. not the Winsock API.
  2106.  
  2107.    There are differences between the semantics of functions with the
  2108. same name under the API.
  2109.  
  2110.    E.g., the select system call on Unix can wait on a standard file
  2111. handles and handles to sockets.  The select call in winsock can only
  2112. wait on sockets.  Because of this, cygwin.dll does a lot of nasty stuff
  2113. behind the scenes, trying to persuade various winsock/win32 functions
  2114. to do what a Unix select would do.
  2115.  
  2116.    If you are porting an application which already uses Winsock, then
  2117. using the net support in Cygwin is wrong.
  2118.  
  2119.    But you can still use native Winsock, and use Cygwin.  The functions
  2120. which cygwin.dll exports are called 'cygwin_<name>'.  There are a load
  2121. of defines which map the standard Unix names to the names exported by
  2122. the dll - check out include/netdb.h:
  2123.  
  2124.      ..etc..
  2125.      void        cygwin_setprotoent (int);
  2126.      void        cygwin_setservent (int);
  2127.      void        cygwin_setrpcent (int);
  2128.      ..etc..
  2129.      #ifndef __INSIDE_CYGWIN_NET__
  2130.      #define endprotoent cygwin_endprotoent
  2131.      #define endservent cygwin_endservent
  2132.      #define endrpcent  cygwin_endrpcent
  2133.      ..etc..
  2134.  
  2135.    The idea is that you'll get the Unix->Cygwin mapping if you include
  2136. the standard Unix header files.  If you use this, you won't need to
  2137. link with libwinsock.a - all the net stuff is inside the dll.
  2138.  
  2139.    The mywinsock.h file is a standard winsock.h which has been hacked to
  2140. remove the bits which conflict with the standard Unix API, or are
  2141. defined in other headers.  E.g., in mywinsock.h, the definition of
  2142. struct hostent is removed.  This is because on a Unix box, it lives in
  2143. netdb.  It isn't a good idea to use it in your applications.
  2144.  
  2145.    As of the b19 release, this information may be slightly out of date.
  2146.  
  2147. I don't want Unix sockets, how do I use normal Win32 winsock?
  2148. -------------------------------------------------------------
  2149.  
  2150.    To use the vanilla Win32 winsock, you just need to #define
  2151. Win32_Winsock and #include "windows.h" at the top of your source
  2152. file(s).  You'll also want to add -lwsock32 to the compiler's command
  2153. line so you link against libwsock32.a.
  2154.  
  2155. What version numbers are associated with Cygwin?
  2156. ------------------------------------------------
  2157.  
  2158.    There is a cygwin.dll major version number that gets incremented
  2159. every time we make a new Cygwin release available.  This corresponds to
  2160. the name of the release (e.g. beta 19's major number is "19").  There
  2161. is also a cygwin.dll minor version number.  If we release an update of
  2162. the library for an existing release, the minor number would be
  2163. incremented.
  2164.  
  2165.    There are also Cygwin API major and minor numbers.  The major number
  2166. tracks important non-backward-compatible interface changes to the API.
  2167. An executable linked with an earlier major number will not be compatible
  2168. with the latest DLL.  The minor number tracks significant API additions
  2169. or changes that will not break older executables but may be required by
  2170. newly compiled ones.
  2171.  
  2172.    Then there is a shared memory region compatibity version number.  It
  2173. is incremented when incompatible changes are made to the shared memory
  2174. region or to any named shared mutexes, semaphores, etc.
  2175.  
  2176.    Finally there is a mount point registry version number which keeps
  2177. track of non-backwards-compatible changes to the registry mount table
  2178. layout.  This has been "B15.0" since the beta 15 release.
  2179.  
  2180. Why isn't _timezone set correctly?
  2181. ----------------------------------
  2182.  
  2183.    Did you explicitly call tzset() before checking the value of
  2184. _timezone?  If not, you must do so.
  2185.  
  2186. Programming Questions
  2187. =====================
  2188.  
  2189. Why is gcc failing?
  2190. -------------------
  2191.  
  2192.    If the error is "gcc: installation problem, cannot exec `cpp': No
  2193. such file or directory", the GCC_EXEC_PREFIX environment variable
  2194. hasn't been set correctly.  The current release does not need
  2195. GCC_EXEC_PREFIX set - it should be able to find cpp regardless of the
  2196. install location.  But if you have it set incorrectly, you may still
  2197. see this message.
  2198.  
  2199. Why can't bison find bison.simple or bison.hairy?
  2200. -------------------------------------------------
  2201.  
  2202.    If you are getting a warning to this effect, you need to set the
  2203. BISONLIB environment variable.  The value should be the directory in
  2204. which bison.simple and bison.hairy are installed.  This will be the
  2205. path leading up to and including the `share' directory of the top-level
  2206. of the binary distributions.  For example, on some systems, you would
  2207. want to set it to `C:/cygnus/cygwin-b20/share'.
  2208.  
  2209. Why is make behaving badly?
  2210. ---------------------------
  2211.  
  2212.    Starting with the beta 19 release, make defaults to a win32 mode in
  2213. which backslashes in filenames are permitted and cmd.exe/command.com is
  2214. used as the sub-shell.  In this mode, escape characters aren't allowed
  2215. among other restrictions.  For this reason, you must set the
  2216. environment variable MAKE_MODE to UNIX to run make on ordinary Unix
  2217. Makefiles.  Here is the full scoop:
  2218.  
  2219.    MAKE_MODE selects between native Win32 make mode (the default) and a
  2220. Unix mode where it behaves like a Unix make.  The Unix mode does allow
  2221. specifying Win32-style paths but only containing forward slashes as the
  2222. path separator.  The path list separator character is a colon in Unix
  2223. mode.
  2224.  
  2225.    Win32 mode expects path separators to be either / or \.  Thus no
  2226. Unix-style \s as escape are allowed.  Win32 mode also uses
  2227. cmd.exe/command.com as the subshell which means "copy" and "del" (and
  2228. other shell builtins) will work.  The path list separator character is
  2229. semi-colon in Win32 mode.  People who want an nmake-like make might
  2230. want to use this mode but no one should expect Unix Makefiles to
  2231. compile in this mode.  That is why the default b19 install sets
  2232. MAKE_MODE to UNIX.
  2233.  
  2234. Why the undefined reference to "WinMain@16"?
  2235. --------------------------------------------
  2236.  
  2237.    Try adding an empty main() function to one of your sources.
  2238.  
  2239. How do I use Win32 API calls?
  2240. -----------------------------
  2241.  
  2242.    It's pretty simple actually.  Cygwin tools require that you
  2243. explicitly link the import libraries for whatever Win32 API functions
  2244. that you are going to use, with the exception of kernel32, which is
  2245. linked automatically (because the startup and/or built-in code uses it).
  2246.  
  2247.    For example, to use graphics functions (GDI) you must link with
  2248. gdi32 like this:
  2249.  
  2250.    gcc -o foo.exe foo.o bar.o -lgdi32
  2251.  
  2252.    or (compiling and linking in one step):
  2253.  
  2254.    gcc -o foo.exe foo.c bar.c -lgdi32
  2255.  
  2256.    The following libraries are available for use in this way:
  2257.  
  2258.    advapi32  largeint  ole32     scrnsave  vfw32 cap       lz32
  2259. oleaut32  shell32   win32spl comctl32  mapi32    oledlg    snmp
  2260. winmm comdlg32  mfcuia32  olepro32  svrapi    winserve ctl3d32
  2261. mgmtapi   opengl32  tapi32    winspool dlcapi    mpr       penwin32
  2262. th32      winstrm gdi32     msacm32   pkpd32    thunk32   wow32 glaux
  2263.  nddeapi   rasapi32  url       wsock32 glu32     netapi32  rpcdce4
  2264. user32    wst icmp      odbc32    rpcndr    uuid imm32     odbccp32
  2265. rpcns4    vdmdbg kernel32  oldnames  rpcrt4    version
  2266.  
  2267.    The regular setup allows you to use the option -mwindows on the
  2268. command line to include a set of the basic libraries (and also make
  2269. your program a GUI program instead of a console program), including
  2270. user32, gdi32 and, IIRC, comdlg32.
  2271.  
  2272.    Note that you should never include -lkernel32 on your link line
  2273. unless you are invoking ld directly.  Do not include the same import
  2274. library twice on your link line.  Finally, it is a good idea to put
  2275. import libraries last on your link line, or at least after all the
  2276. object files and static libraries that reference them.
  2277.  
  2278.    The first two are related to problems the linker has (as of b18 at
  2279. least) when import libraries are referenced twice.  Tables get messed
  2280. up and programs crash randomly.  The last point has to do with the fact
  2281. that gcc processes the files listed on the command line in sequence and
  2282. will only resolve references to libraries if they are given after the
  2283. file that makes the reference.
  2284.  
  2285. How do I compile a Win32 executable that doesn't use Cygwin?
  2286. ------------------------------------------------------------
  2287.  
  2288.    The -mno-cygwin flag to gcc makes gcc link against standard Microsoft
  2289. DLLs instead of Cygwin.  This is desirable for native Windows programs
  2290. that don't need a UNIX emulation layer.
  2291.  
  2292. How do I make the console window go away?
  2293. -----------------------------------------
  2294.  
  2295.    The default during compilation is to produce a console application.
  2296. It you are writing a GUI program, you should either compile with
  2297. -mwindows as explained above, or add the string
  2298. "-Wl,-subsystem,windows" to the GCC commandline.
  2299.  
  2300. Why does make complain about a "missing separator"?
  2301. ---------------------------------------------------
  2302.  
  2303.    This problem usually occurs as a result of someone editing a Makefile
  2304. with a text editor that replaces tab characters with spaces.  Command
  2305. lines must start with tabs.
  2306.  
  2307. Why can't we redistribute Microsoft's Win32 headers?
  2308. ----------------------------------------------------
  2309.  
  2310.    Subsection 2.d.f of the `Microsoft Open Tools License agreement'
  2311. looks like it says that can not "permit further redistribution of the
  2312. Redistributables to their end users".  We take this to mean that we can
  2313. give them to you, but you can't give them to anyone else, which is
  2314. something that Cygnus can't agree to.  Fortunately, we have our own
  2315. Win32 headers which are pretty complete.
  2316.  
  2317. How do I link against .lib files?
  2318. ---------------------------------
  2319.  
  2320.    1. Build a C file with a function table. In that table you should
  2321. put all functions you want to use. This is to force the linker to
  2322. include all the object files from the .lib. Maybe there is an option to
  2323. force LINK.EXE to include an object file.  2. Build a dummy 'LibMain'
  2324. 3. Build a .def with all the exports you need 4. Link with your .lib
  2325. using link.exe.
  2326.  
  2327.    or
  2328.  
  2329.    1. Extract all the object files from the .lib using LIB.EXE 2. Build
  2330. a dummy C file referencing all the functions you need.  Either with a
  2331. direct call or with an initialized function pointer.  3. Build a dummy
  2332. LibMain 4. Link all the objects with this file+LibMain.  5. Write a
  2333. .def.  6. Link.
  2334.  
  2335.    You can use these methods to use MSVC (and many other runtime libs)
  2336. with Cygwin development tools.
  2337.  
  2338.    Note that this is a lot of work (half a day or so), but much less
  2339. than rewriting the runtime library in question from specs...
  2340.  
  2341.    (thanks to Jacob Navia (root@jacob.remcomp.fr) for this explanation)
  2342.  
  2343. How do I rebuild the tools on my NT box?
  2344. ----------------------------------------
  2345.  
  2346.    Assuming that you have the src installed as /src, will build in the
  2347. directory /obj, and want to install the tools in /install:
  2348.  
  2349.      bash
  2350.      cd /obj
  2351.      /src/configure --prefix=/install -v > configure.log 2>&1
  2352.      make > make.log 2>&1
  2353.      make install > install.log 2>&1
  2354.  
  2355. How can I compile a powerpc NT toolchain?
  2356. -----------------------------------------
  2357.  
  2358.    Unfortunately, this will be difficult.  It hasn't been built for
  2359. some time (late 1996) since Microsoft has dropped development of
  2360. powerpc NT.  Exception handling/signals support semantics/args have been
  2361. changed for x86 and not updated for ppc so the ppc specific support
  2362. would have to be rewritten.  We don't know of any other
  2363. incompatibilities.  Please send us patches if you do this work!
  2364.  
  2365. How can I compile an Alpha NT toolchain?
  2366. ----------------------------------------
  2367.  
  2368.    We have not ported the tools to Alpha NT and do not have plans to do
  2369. so at the present time.  We would be happy to add support for Alpha NT
  2370. if someone contributes the changes to us.
  2371.  
  2372. How can I adjust the heap/stack size of an application?
  2373. -------------------------------------------------------
  2374.  
  2375.    Pass heap/stack linker arguments to gcc.  To create foo.exe with a
  2376. heap size of 1024 and a stack size of 4096, you would invoke gcc as:
  2377.  
  2378.    `gcc -Wl,--heap,1024,--stack,4096 -o foo foo.c'
  2379.  
  2380. How can I find out which dlls are needed by an executable?
  2381. ----------------------------------------------------------
  2382.  
  2383.    objdump -p provides this information.
  2384.  
  2385. How do I build a DLL?
  2386. ---------------------
  2387.  
  2388.    There's documentation that explains the process on the main Cygwin
  2389. project web page (http://sourceware.cygnus.com/cygwin/).
  2390.  
  2391. How can I set a breakpoint at MainCRTStartup?
  2392. ---------------------------------------------
  2393.  
  2394.    Set a breakpoint at *0x401000 in gdb and then run the program in
  2395. question.
  2396.  
  2397. How can I build a relocatable dll?
  2398. ----------------------------------
  2399.  
  2400.    You must execute the following sequence of five commands, in this
  2401. order:
  2402.  
  2403.      $(LD) -s --base-file BASEFILE --dll -o DLLNAME OBJS LIBS -e ENTRY
  2404.      
  2405.      $(DLLTOOL) --as=$(AS) --dllname DLLNAME --def DEFFILE \
  2406.              --base-file BASEFILE --output-exp EXPFILE
  2407.      
  2408.      $(LD) -s --base-file BASEFILE EXPFILE -dll -o DLLNAME OBJS LIBS -e ENTRY
  2409.      
  2410.      $(DLLTOOL) --as=$(AS) --dllname DLLNAME --def DEFFILE \
  2411.          --base-file BASEFILE --output-exp EXPFILE
  2412.      
  2413.      $(LD) EXPFILE --dll -o DLLNAME OBJS LIBS -e ENTRY
  2414.  
  2415.    In this example, $(LD) is the linker, ld.
  2416.  
  2417.    $(DLLTOOL) is dlltool.
  2418.  
  2419.    $(AS) is the assembler, as.
  2420.  
  2421.    DLLNAME is the name of the DLL you want to create, e.g., tcl80.dll.
  2422.  
  2423.    OBJS is the list of object files you want to put into the DLL.
  2424.  
  2425.    LIBS is the list of libraries you want to link the DLL against.  For
  2426. example, you may or may not want -lcygwin.  You may want -lkernel32.
  2427. Tcl links against -lcygwin -ladvapi32 -luser32 -lgdi32 -lcomdlg32
  2428. -lkernel32.
  2429.  
  2430.    DEFFILE is the name of your definitions file.  A simple DEFFILE would
  2431. consist of "EXPORTS" followed by a list of all symbols which should be
  2432. exported from the DLL.  Each symbol should be on a line by itself.
  2433. Other programs will only be able to access the listed symbols.
  2434.  
  2435.    BASEFILE is a temporary file that is used during this five stage
  2436. process, e.g., tcl.base.
  2437.  
  2438.    EXPFILE is another temporary file, e.g., tcl.exp.
  2439.  
  2440.    ENTRY is the name of the function which you want to use as the entry
  2441. point.  This function should be defined using the WINAPI attribute, and
  2442. should take three arguments:         int WINAPI startup (HINSTANCE,
  2443. DWORD, LPVOID)
  2444.  
  2445.    This means that the actual symbol name will have an appended @12, so
  2446. if your entry point really is named `startup', the string you should
  2447. use for ENTRY in the above examples would be `startup@12'.
  2448.  
  2449.    If your DLL calls any Cygwin API functions, the entry function will
  2450. need to initialize the Cygwin impure pointer.  You can do that by
  2451. declaring a global variable `_impure_ptr', and then initializing it in
  2452. the entry function.  Be careful not to export the global variable
  2453. `_impure_ptr' from your DLL; that is, do not put it in DEFFILE.
  2454.  
  2455.      /* This is a global variable.  */
  2456.      struct _reent *_impure_ptr;
  2457.      extern struct _reent *__imp_reent_data;
  2458.      
  2459.      int entry (HINSTANT hinst, DWORD reason, LPVOID reserved)
  2460.      {
  2461.        _impure_ptr = __imp_reent_data;
  2462.        /* Whatever else you want to do.  */
  2463.      }
  2464.  
  2465.    You may put an optional `-subsystem windows' on the $(LD) lines.  The
  2466. Tcl build does this, but I admit that I no longer remember whether this
  2467. is important.  Note that if you specify a -subsytem <x> flag to ld, the
  2468. -e entry must come after the subsystem flag, since the subsystem flag
  2469. sets a different default entry point.
  2470.  
  2471.    You may put an optional `-image-base BASEADDR' on the $(LD) lines.
  2472. This will set the default image base.  Programs using this DLL will
  2473. start up a bit faster if each DLL occupies a different portion of the
  2474. address space.  Each DLL starts at the image base, and continues for
  2475. whatever size it occupies.
  2476.  
  2477.    Now that you've built your DLL, you may want to build a library so
  2478. that other programs can link against it.  This is not required: you
  2479. could always use the DLL via LoadLibrary.  However, if you want to be
  2480. able to link directly against the DLL, you need to create a library.
  2481. Do that like this:
  2482.  
  2483.    $(DLLTOOL) -as=$(AS) -dllname DLLNAME -def DEFFILE -output-lib
  2484. LIBFILE
  2485.  
  2486.    $(DLLTOOL), $(AS), DLLNAME, and DEFFILE are the same as above.  Make
  2487. sure you use the same DLLNAME and DEFFILE, or things won't work right.
  2488.  
  2489.    LIBFILE is the name of the library you want to create, e.g.,
  2490. libtcl80.a.  You can then link against that library using something
  2491. like -ltcl80 in your linker command.
  2492.  
  2493. How can I debug what's going on?
  2494. --------------------------------
  2495.  
  2496.    You can debug your application using `gdb'.  Make sure you compile
  2497. it with the -g flag!  If your application calls functions in MS dlls,
  2498. gdb will complain about not being able to load debug information for
  2499. them when you run your program.  This is normal since these dlls don't
  2500. contain debugging information (and even if they did, that debug info
  2501. would not be compatible with gdb).
  2502.  
  2503. Can I use a system trace mechanism instead?
  2504. -------------------------------------------
  2505.  
  2506.    Yes.  At the most basic level, you can set the `STRACE' environment
  2507. variable to `1', and get a whole load of debug information on your
  2508. screen whenever a Cygwin app runs.  This is an especially useful tool
  2509. to use when tracking bugs down inside the Cygwin library.  `STRACE' can
  2510. be set to different values to achieve different amounts of granularity.
  2511. You can set it to `0x10' for information about syscalls or `0x800' for
  2512. signal/process handling-related info, to name two.  The strace
  2513. mechanism is well documented in the Cygwin library sources in the file
  2514. `winsup/include/sys/strace.h'.
  2515.  
  2516. The linker complains that it can't find something.
  2517. --------------------------------------------------
  2518.  
  2519.    A common error is to put the library on the command line before the
  2520. thing that needs things from it.
  2521.  
  2522.    This is wrong `gcc -lstdc++ hello.cc'.  This is right `gcc hello.cc
  2523. -lstdc++'.
  2524.  
  2525. I use a function I know is in the API, but I still get a link
  2526. -------------------------------------------------------------
  2527.  
  2528.    error.
  2529.  
  2530.    The function probably isn't declared in the header files, or the
  2531. UNICODE stuff for it isn't filled in.
  2532.  
  2533. Can you make DLLs that are linked against libc ?
  2534. ------------------------------------------------
  2535.  
  2536.    Yes.
  2537.  
  2538. Where is malloc.h?
  2539. ------------------
  2540.  
  2541.    Include stdlib.h instead of malloc.h.
  2542.  
  2543. Can I use my own malloc?
  2544. ------------------------
  2545.  
  2546.    If you define a function called `malloc' in your own code, and link
  2547. with the DLL, the DLL *will* call your `malloc'.  Needless to say, you
  2548. will run into serious problems if your malloc is buggy.
  2549.  
  2550.    If you run any programs from the DOS command prompt, rather than
  2551. from in bash, the DLL will try and expand the wildcards on the command
  2552. line.  This process uses `malloc' *before* your main line is started.
  2553. If you have written your own `malloc' to need some initialization to
  2554. occur after `main' is called, then this will surely break.
  2555.  
  2556. Can I mix objects compiled with msvc++ and gcc?
  2557. -----------------------------------------------
  2558.  
  2559.    Yes, this should work, as long as you are dealing with C object
  2560. files.  MSVC C++ uses a different mangling scheme than GNU C++, so you
  2561. will have difficulties combining C++ objects.
  2562.  
  2563. Can I use the gdb debugger to debug programs built by VC++?
  2564. -----------------------------------------------------------
  2565.  
  2566.    No, not for full (high level source language) debugging.  The
  2567. Microsoft compilers generate a different type of debugging symbol
  2568. information, which gdb does not understand.
  2569.  
  2570.    However, the low-level (assembly-type) symbols generated by
  2571. Microsoft compilers are coff, which gdb DOES understand.  Therefore you
  2572. should at least be able to see all of your global symbols; you just
  2573. won't have any information about data types, line numbers, local
  2574. variables etc.
  2575.  
  2576. Where can I find info on x86 assembly?
  2577. --------------------------------------
  2578.  
  2579.    CPU reference manuals for Intel's current chips are available in
  2580. downloadable PDF form on Intel's web site:
  2581.  
  2582.    `http://developer.intel.com/design/pro/manuals/'
  2583.  
  2584. Shell scripts aren't running properly from my makefiles?
  2585. --------------------------------------------------------
  2586.  
  2587.    You need to have . (dot) in your $PATH.  You should NOT need to add
  2588. /bin/sh in front of each and every shell script invoked in your
  2589. Makefiles.
  2590.  
  2591. What preprocessor do I need to know about?
  2592. ------------------------------------------
  2593.  
  2594.    We use _WIN32 to signify access to the Win32 API and __CYGWIN__ for
  2595. access to the Cygwin environment provided by the dll.
  2596.  
  2597.    We chose _WIN32 because this is what Microsoft defines in VC++ and
  2598. we thought it would be a good idea for compatibility with VC++ code to
  2599. follow their example.  We use _MFC_VER to indicate code that should be
  2600. compiled with VC++.
  2601.  
  2602. Where can I get f77 and objc components for B20 EGCS 1.1?
  2603. ---------------------------------------------------------
  2604.  
  2605.    B20-compatible versions of the f77 and objc components are available
  2606. from `http://www.xraylith.wisc.edu/~khan/software/gnu-win32/'.
  2607.  
  2608. How should I port my Unix GUI to Windows?
  2609. -----------------------------------------
  2610.  
  2611.    There are two basic strategies for porting Unix GUIs to Windows.
  2612.  
  2613.    The first is to use a portable graphics library such as tcl/tk, X11,
  2614. or V (and others?).  Typically, you will end up with a GUI on Windows
  2615. that requires some runtime support.  With tcl/tk, you'll want to
  2616. include the necessary library files and the tcl/tk DLLs.  In the case
  2617. of X11, you'll need everyone using your program to have an X11 server
  2618. installed.
  2619.  
  2620.    The second method is to rewrite your GUI using Win32 API calls (or
  2621. MFC with VC++).  If your program is written in a fairly modular
  2622. fashion, you may still want to use Cygwin if your program contains a
  2623. lot of shared (non-GUI-related) code.  That way you still gain some of
  2624. the portability advantages inherent in using Cygwin.
  2625.  
  2626. Why not use DJGPP ?
  2627. -------------------
  2628.  
  2629.    DJGPP is a similar idea, but for DOS instead of Win32.  DJGPP uses a
  2630. "DOS extender" to provide a more reasonable operating interface for its
  2631. applications.   The Cygwin toolset doesn't have to do this since all of
  2632. the applications are native WIN32.   Applications compiled with the
  2633. Cygwin tools can access the Win32 API functions, so you can write
  2634. programs which use the Windows GUI.
  2635.  
  2636.    You can get more info on DJGPP by following
  2637. `http://www.delorie.com/'.
  2638.  
  2639. Known/potential Problems in the B20.1 Release
  2640. *********************************************
  2641.  
  2642. Windows 95 freezing up
  2643. ======================
  2644.  
  2645.    While this problem may have been worse under B19, Control-c's in bash
  2646. under Win 95 may still be able to lock up the Win 95 kernel, freezing
  2647. your machine.  This problem can be fixed if you are running the OSR2
  2648. version of Win 95 by installing the USB patch available on OSR2 CDs or
  2649. on MSDN subscription CDs.  More information about OSR2 and the USB patch
  2650. is available from `http://www.compuclinic.com/osr2faq/index.html'.
  2651.  
  2652. Some programs can't deal with // pathname scheme in arguments
  2653. =============================================================
  2654.  
  2655.    gcc and other tools aren't fully compatible with the current pathname
  2656. scheme: it can't grok an argument of -I//d/foo which means it is vital
  2657. that when attempting to configure/build UNIX packages, that only normal
  2658. paths with single slashes are used.
  2659.  
  2660. History
  2661. *******
  2662.  
  2663. Beta 20.1 Update (Nov 20 1998)
  2664. ==============================
  2665.  
  2666.    This is a bug fix update to the Beta 20 release.
  2667.  
  2668.    The main change is an improved version of the Cygwin library although
  2669. there are also a couple of other minor changes to the tools.
  2670.  
  2671. Changes in specific tools:
  2672. --------------------------
  2673.  
  2674.    The "-mno-cygwin" flag to gcc now include the correct headers.  In
  2675. 20.0, it included the Cygwin headers which was incorrect.
  2676.  
  2677.    The "-pipe" flag to gcc works correctly now.
  2678.  
  2679.    The cygcheck program now reassures users that not finding cpp is the
  2680. correct behavior.
  2681.  
  2682.    The "-b" flag to md5sum can now be used to generate correct checksums
  2683. of binary files.
  2684.  
  2685.    The libtermcap library has been added to the compiler tools sources.
  2686. It is the new source of the termcap library and /etc/termcap file.
  2687.  
  2688.    The less pager (using libtermcap) has been added to the binary
  2689. distribution.
  2690.  
  2691. Changes in the Cygwin API (cygwin.dll):
  2692. ---------------------------------------
  2693.  
  2694.    This version of Cygwin is backwards-compatible with the beta 20 and
  2695. 19 releases.  The library is now much more stable under Windows 9x and
  2696. the bugs affecting configures under 9x (and NT to a lesser extent) have
  2697. also been fixed.
  2698.  
  2699.    The bug that made it necessary to start the value of the CYGWIN
  2700. environment variable with two leading spaces has been fixed.
  2701.  
  2702.    The serial support in the select call has been fixed.
  2703.  
  2704.    Handling of DLLs loaded by non-cygwin apps has been improved.  Bugs
  2705. in dlopen have been fixed.
  2706.  
  2707.    Passing _SC_CHILD_MAX to the sysconf function now yields CHILD_MAX
  2708. (63) instead of _POSIX_CHILD_MAX (3).
  2709.  
  2710.    Several minor path bugs have been fixed.  Including the one that
  2711. caused "mkdir a/" to fail.
  2712.  
  2713.    The include file sys/sysmacros.h has been added.  Added missing
  2714. protos for wcslen and wcscmp to wchar.h.
  2715.  
  2716.    __P is now defined in include/sys/cdefs.h.  To support that last
  2717. change, the top-level Makefile.in now sets CC_FOR_TARGET and
  2718. CXX_FOR_TARGET differently.
  2719.  
  2720.    Cygwin now exports the following newlib bessel functions: j1, jn, y1,
  2721. yn.
  2722.  
  2723.    Several tty ioctl options have been added: TCGETA, TCSETA, TCSETAW,
  2724. and TCSETAF.
  2725.  
  2726.    Several functions cope with NULL pointer references more gracefully.
  2727.  
  2728.    Problems with execution of relative paths via #! should be fixed.
  2729.  
  2730. Release Beta 20 (Oct 30 1998)
  2731. =============================
  2732.  
  2733.    This is a significant update to the Beta 19 release.  In addition to
  2734. an EGCS-based compiler and updated tools, this release includes a new
  2735. version of the Cygwin library that contains many improvements and
  2736. bugfixes over the last one.
  2737.  
  2738. The project has a new name!
  2739. ---------------------------
  2740.  
  2741.    Starting with this release, we are retiring the "GNU-Win32" name for
  2742. the releases.  We have also dropped the "32" from Cygwin32.  This means
  2743. that you should now refer to the tools as "the Cygwin toolset", the
  2744. library as "the Cygwin library" or "the Cygwin DLL", and the library's
  2745. interface as "the Cygwin API".
  2746.  
  2747.    Because of this name change, we have changed any aspects of the
  2748. library that involved the name "Cygwin32".  For example, the CYGWIN32
  2749. environment variable is now the CYGWIN environment variable.  API
  2750. functions starting with cygwin32_ are still available under that form
  2751. for backwards-compatibility as well as under the new cygwin_-prefixed
  2752. names.  The same goes for the change of preprocessor define from
  2753. __CYGWIN32__ to __CYGWIN__.  We will remove the old names in a future
  2754. release so please take the minute or two that it will take to remove
  2755. those "32"s.  Thanks and I apologize for the hassle this may cause
  2756. people.  We would have changed the name to "Bob" but that name's already
  2757. taken by Microsoft...  :-)
  2758.  
  2759.    Why change it?  For one thing, not all of the software included in
  2760. the distributions is GNU software, including the Cygwin library itself.
  2761. So calling the project "GNU-Win32" has always been a bit of a
  2762. misnomer.  In addition, we think that calling the tools the "Cygwin
  2763. tools" that use the "Cygwin library" will be less confusing to people.
  2764.  
  2765.    Also notice that we are now on the spiffy new sourceware.cygnus.com
  2766. web/ftp site.  The old address will work for some unknown period of
  2767. time (hopefully at least until we get all of the mirrors adjusted).
  2768.  
  2769. Changes in specific tools:
  2770. --------------------------
  2771.  
  2772.    The latest public EGCS release is now the basis for the compiler used
  2773. in Cygwin distributions.  As a result, EGCS 1.1 is the compiler in this
  2774. release, with a few additional x86/Cygwin-related patches.
  2775.  
  2776.    Those of you who are more interested in native Windows development
  2777. than in porting Unix programs will be glad to know that a new gcc flag
  2778. "-mno-cygwin" will link in the latest Mingw32 libs and produce an
  2779. executable that does not use Cygwin.
  2780.  
  2781.    All of the other development tools have been updated to their latest
  2782. versions.  The linker (ld) includes many important bug fixes.  It is now
  2783. possible to safely strip a DLL with a .reloc section.  The windres
  2784. resource compiler is significantly improved.
  2785.  
  2786.    Beta 20 also includes upgrades to a number of packages: ash-0.3.2-4,
  2787. bash 2.02.1, grep-2.2, ncurses 4.2, and less 332.  We have added bzip2
  2788. 0.9.0 to the distribution.  And you'll now find that the df utility has
  2789. joined its other friends from the fileutils package.
  2790.  
  2791.    The sh executable is still ash from the Debian Linux distribution
  2792. but no longer has the problematic quoting bug that was present in the
  2793. Beta 19 release.  Control-Cs in the bash shell no longer kill
  2794. background tasks.
  2795.  
  2796.    Tcl/tk are upgraded to version 8.1a2 (with additional patches).
  2797. Compatible versions of tix and itcl are included.  These all include
  2798. Cygwin-compatible configury files so you can do a Unix-style build of
  2799. the Win32 ports of tcl/tk.  expect has been upgraded to 5.26 with some
  2800. additional Cygwin patches.
  2801.  
  2802.    In response to customer requests and feedback, Cygnus has developed a
  2803. better graphical front end to GDB than GDBtk or WinGDB.  This tcl-based
  2804. GUI is shipping today to customers of the GNUPro Toolkit.  The
  2805. instrumentation changes to GDB and the tcl interpreter that was built
  2806. into GDB are part of the GPL'd source base.  But the tcl scripts are not
  2807. being made available to the net at this time.  For this reason, you will
  2808. only find a command-line version of gdb in this Cygwin release.
  2809.  
  2810.    DJ Delorie has written a new "cygcheck" program that will print out
  2811. useful information about how your Cygwin environment is set up, what
  2812. DLLs a named executable is loading from where, etc.  We hope this will
  2813. make it easier to help diagnose common setup problems.
  2814.  
  2815.    The ps utility has been upgraded.  It now has several options
  2816. including shorter and longer output formats.
  2817.  
  2818. Changes in the Cygwin API (cygwin.dll):
  2819. ---------------------------------------
  2820.  
  2821.    This version of Cygwin is backwards-compatible with the beta 19
  2822. release.  You can use the new "cygwin1.dll" with your old B19-compiled
  2823. executables if you move the old "cygwinb19.dll" out of the way and
  2824. install a copy of "cygwin1.dll" as "cygwinb19.dll".
  2825.  
  2826.    Quite a lot of the Cygwin internals have been rewritten or modified
  2827. to address various issues.  If you have a question about specific
  2828. changes, the winsup/ChangeLog file in the development tools sources
  2829. lists all changes made to the DLL over the last three years.  Following
  2830. are a few highlights:
  2831.  
  2832.    We are now using a new versioning scheme for Cygwin.  There is now a
  2833. separate version number for the DLL, the API, the shared memory region
  2834. interfaces, and the registry interface.  This will hopefully make it
  2835. easier for multiple Cygwin toolsets to coexist in one user environment.
  2836.  
  2837.    Windows 98 is now supported (it is like Windows 95 from Cygwin's
  2838. perspective).  We still recommend upgrading to Windows NT.
  2839.  
  2840.    While there is still a lot left to do in improving Cygwin's runtime
  2841. performance, we have put some effort into this prior to the B20 release.
  2842. Hopefully you will find that the latest version of Cygwin is faster than
  2843. ever.  In addition, we have plugged several nasty handle leaks
  2844. associated with opening/closing files and with using ttys.
  2845.  
  2846.    The lseek call now uses WriteFile to fill gaps with zeros whenever a
  2847. write is done past an EOF, rather than leaving "undefined" data as Win32
  2848. specifies.
  2849.  
  2850.    Significant work has been done to improve the Cygwin header files.
  2851.  
  2852.    The Cygwin Support for Unix-style serial I/O is much improved.
  2853.  
  2854.    Path handling has had another round of fixes/rewrites.  We no longer
  2855. use NT Extended Attributes by default for storing Unix
  2856. permissions/execute status because the file NT creates on FAT
  2857. partitions is not scalable to thousands of files (everything slows to a
  2858. crawl).
  2859.  
  2860.    Signal handling has also gotten a fair amount of attention.
  2861. Unfortunately, there are still some problems combining itimers and
  2862. Windows 9x.
  2863.  
  2864.    The number of ttys has been upped from 16 to 128.
  2865.  
  2866.    New API calls included in the DLL: sethostent, endhostent.
  2867.  
  2868.    As mentioned earlier, all cygwin32_-prefixed functions are now
  2869. exported with a cygwin_ prefix instead.  Please adjust your code to
  2870. call the newly named functions.
  2871.  
  2872.    reads of `slow' devices are now correctly interrupted by signals,
  2873. i.e.  a read will receive an EINTR.
  2874.  
  2875. Release Beta 19 (Feb 26 1998)
  2876. =============================
  2877.  
  2878.    This is a major release.  It includes a much-updated version of the
  2879. Cygwin32 library.  Because the Cygwin API has changed in incompatible
  2880. ways, the dll has been renamed cygwinb19.dll to avoid invalidating
  2881. previously built executables.
  2882.  
  2883.    Note that a B19-compiled application exec()ing a B18-compiled
  2884. application will treat the B18-compiled executable as an ordinary Win32
  2885. executable.  This means that open file descriptors and some other
  2886. internals will not be inheritted on exec() calls.  The reason for this
  2887. is that different shared memory areas are used by the different versions
  2888. of the cygwin library.  This may or may not be of importance to you
  2889. depending on what you're doing.
  2890.  
  2891.    The Beta 19 release of the Cygwin32 library continues to be licensed
  2892. under the GNU General Public License (GPL).
  2893.  
  2894.    The PE format definition used by the compiler tools now matches
  2895. Microsoft's more closely.  This should allow better interoperability
  2896. with other vendors' development tools although more work probably
  2897. remains to be done in this area.  This change invalidates all previously
  2898. built object (.o) and static library (.a) files so be sure to
  2899. delete/rebuild old .o and .a files you are using!
  2900.  
  2901.    Finally, old symlinks are invalidated by this release.  The "system"
  2902. attribute is now used to mark symlinks which significantly speeds up
  2903. fstat and other file related calls.  Either recreate old ones or set
  2904. their "system" attribute flag so they will be recognized properly.
  2905.  
  2906.    The new installer takes care of all environment variable settings
  2907. automatically by installing a shortcut in program files that pulls up a
  2908. bash prompt with all the correct environment variables set.  As a
  2909. result, the setup process should be much cleaner than in the last
  2910. release.
  2911.  
  2912.    For those of you who end up moving the tools around, the batch file
  2913. that sets up the default environment is called cygnus.bat and is
  2914. installed in the root of the install directory.  Because the tools have
  2915. been compiled to install in /cygnus/b19, when installed in this
  2916. location, the tools should "just work" if the bin directory is in your
  2917. path (no special environment variables are needed).  The only exception
  2918. is MAKE_MODE which needs to be set if you want to get ordinary Unix-like
  2919. make behavior - see the make notes below for more information.
  2920.  
  2921. Changes in specific tools:
  2922. --------------------------
  2923.  
  2924.    Ian Lance Taylor has written a resource compiler called "windres".
  2925. It can be used to compile windows resources from a textual rc file into
  2926. a COFF file.  The sources are in the binutils subdirectory of the
  2927. sources.
  2928.  
  2929.    We have upgraded many of the utilities.  Beta 19 includes bash
  2930. 2.01.1, fileutils 3.16, gawk 3.0.3, patch 2.5, shellutils 1.16, tar
  2931. 1.12, textutils 1.22, and texinfo 3.11.  Bash under Cygwin32 now
  2932. includes working job control among other improvements.
  2933.  
  2934.    The sh executable is now ash 0.2 from the Debian Linux distribution.
  2935. Using this more minimal shell as /bin/sh.exe speeds up configures
  2936. significantly.
  2937.  
  2938.    Bison 1.25 has been added.
  2939.  
  2940.    Tcl/tk are upgraded to version 8.0.  Compatible versions of tix and
  2941. itcl have been added.  These all include Cygwin32-compatible configury
  2942. files so you can do a Unix-style build of the Win32 ports of tcl/tk.
  2943.  
  2944.    Expect 5.21.3 is included and basically works.
  2945.  
  2946.    The binaries have been compiled with i686 optimizations turned on
  2947. which may result in a speed increase on Pentium-based systems although
  2948. the tools should work on i386 and later chips.
  2949.  
  2950.    The linker (ld) has been enhanced - it will now add the idata3
  2951. terminator automatically when linking dlls.
  2952.  
  2953.    kill now supports signal names in arguments.  ps now shows process
  2954. start time information.
  2955.  
  2956.    Although the default install of the tools should hide this detail,
  2957. the make utility now defaults to a Win32 mode which uses
  2958. cmd.exe/command.com as the subshell.  This mode allows the use of
  2959. backslashes in filenames.  To build Unix programs, you need to set the
  2960. MAKE_MODE environment variable to "UNIX".  This way you will get the
  2961. old behavior of using sh.exe as the subshell.
  2962.  
  2963. Changes in the Cygwin32 API (cygwin.dll):
  2964. -----------------------------------------
  2965.  
  2966.    The interface is now better defined.  It contains libc, libm, and
  2967. Unix compatability calls.  It no longer contains exports for libgcc.a.
  2968. This should result in a more stable interface.  See the calls.texinfo
  2969. document for interface documentation.
  2970.  
  2971.    There is now only one environment variable called CYGWIN32 that
  2972. controls the overall behavior of the dll:
  2973.  
  2974.    set CYGWIN32=[no]title [no]strip_title [no]binmode [no]glob
  2975.       strace=mask:cache,file [no]tty
  2976.  
  2977.    So if you "set CYGWIN32=title tty", then you would get tty support
  2978. (see below) and have the current running process listed in the title
  2979. bar.
  2980.  
  2981.    B19 adds support for:
  2982.  
  2983.    * tty and pseudo-tty devices.  For now, ttys default to off because
  2984. taking over the console causes problems with using non-Cygwin console
  2985. programs in a Cygwin console.  To turn it on, set the environment
  2986. variable CYGWIN32 to include "tty".  * Hard links (requires NT on an
  2987. NTFS filesystem).  When not possible (on non-NTFS filesystems), link()
  2988. will make a copy of the file in question as it has done in previous
  2989. releases.  * The SIGWINCH signal.  If tty handling is enabled then the
  2990. process will receive a SIGWINCH signal when the screen size changes.  *
  2991. Additional terminal escape sequences recognized: scroll region setting
  2992. via <ESC>[n1;n2r and setting the console title using xterm escape
  2993. sequence: <ESC>]2;new title^G .
  2994.  
  2995.    The following calls have been added:
  2996.  
  2997.    * ptsname, grantpt, unlockpt * login, logout, ttyslot, ctermid *
  2998. cfgetispeed, cfgetospeed, cfsetispeed, cfsetospeed * setitimer,
  2999. getitimer, ftime, tzset * wait3, wait4, pause, sigpause * getpgid,
  3000. killpg, setegid (stub) * strlwr, strupr * sexecve, sexecl, sexecle,
  3001. sexeclp, sexeclpe, sexecv, sexecp, sexecvpe * rcmd, rresvport, rexec *
  3002. strsignal, strtosigno * dlopen, dlsym, dlclose, dlerror * inet_netof,
  3003. inet_makeaddr * socketpair * fpathconf, realpath, chroot (stub) *
  3004. initgroups (stub), getgroups * random, srandom
  3005.  
  3006.    The following calls have been removed:
  3007.  
  3008.    * ScreenCols, ScreenGetCursor, ScreenRows, ScreenSetCursor * getkey,
  3009. kbhit * crypt (stub) * all libgcc.a exports
  3010.  
  3011.    The Winsock dll (wsock32.dll) is no longer implicitly linked into
  3012. the Cygwin32 dll.  Instead, it is explicitly loaded with LoadLibrary
  3013. the first time a process calls a Cygwin32 networking function.  This
  3014. speeds up most processes significantly (configures by about 20%).
  3015.  
  3016.    The signal-related code has been rewritten from scratch.  Ditto for
  3017. most of the path handling code.
  3018.  
  3019.    The globbing and getopt code has been replaced with BSD-derived
  3020. code.  The regexp code has been replaced with Henry Spencer's PD
  3021. implementation.
  3022.  
  3023.    Doug Lea's malloc is now being used as the default malloc exported by
  3024. cygwin.  This malloc balances speed and compactness very nicely but is
  3025. more unforgiving when attempts are made to free already freed memory,
  3026. i.e., a segmentation violation will occur.
  3027.  
  3028.    The bsearch call has been rewritten.
  3029.  
  3030.    Alt Gr-key behavior has been changed in this release.  The left
  3031. alt-key still produces ESC-key sequence.  The right alt (Alt Gr)-key now
  3032. produces characters according to national keyboard layouts.
  3033.  
  3034.    Processes no longer write their name in the title bar unless you
  3035. include "title" in the CYGWIN32 environment variable (see above).
  3036.  
  3037.    Multiple cygwin.dlls no longer use the same memory space unless they
  3038. are identical (built at the same time).  This allows multiple dlls with
  3039. incompatible shared memory usage to be run simultaneously.  It also
  3040. facilitates debugging a buggy cygwin.dll.  By keeping only a single copy
  3041. of the latest cygwin.dll on your system, you can be assured of having
  3042. all cygwin processes exist in the same shared memory space.
  3043.  
  3044.    The slash mount no longer defaults to C:.  It now defaults to the
  3045. system drive letter (where the OS is installed).
  3046.  
  3047.    The standard dl* dynamic library loader functions are now available.
  3048. Cygwin32 B19 now correctly copies data after a fork and automatically
  3049. reloads any DLLs loaded in the parent process.  In addition, dlls will
  3050. now be correctly initialized when loaded and global constructors will
  3051. be called.  Global destructors will be called when the DLL is detached.
  3052. Handles gotten from dlopen or dlsym in the parent will be accessible in
  3053. a forked child.  The LD_LIBRARY_PATH environment variable is used in
  3054. the dlopen search.
  3055.  
  3056.    Include the file <cygwin32/cygwin_dll.h> in a cygwin32 created .dll
  3057. and use the line DECLARE_CYGWIN_DLL(dll-entry-point) to produce .dlls
  3058. that can be used with these functions.
  3059.  
  3060. Release Beta 18 (May 6 1997)
  3061. ============================
  3062.  
  3063.    This is a major release.  The new cygwin.dll is still
  3064. backwards-compatible with previously linked applications but contains
  3065. significant changes.
  3066.  
  3067.    We have completely changed the installation process to make use of
  3068. an InstallShield5-based installer.  This should reduce the number of
  3069. installation problems people have experienced in the past.  However, it
  3070. is still necessary to set environment variables by hand, as explained
  3071. in the README.txt accompanying the distribution.  (Future gnu-win32
  3072. installers may include the capability to do this automatically).
  3073.  
  3074. Changes in specific tools:
  3075. --------------------------
  3076.  
  3077.    GCC compilation times have been improved by 20-30% by using spawn()
  3078. instead of fork().
  3079.  
  3080.    GCC accepts both Win32 and POSIX paths/path lists in its environment
  3081. variables (COMPILER_PATH, LIBRARY_PATH, C_INCLUDE_PATH,
  3082. CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH)
  3083.  
  3084.    GDB comes with a tcl/tk-based GUI (gdbtk).  You can still invoke the
  3085. command line gdb by invoking it with "gdb -nw".
  3086.  
  3087.    Bash verifies that /tmp exists and is a directory upon startup.  It
  3088. complains if this isn't the case.
  3089.  
  3090.    Running gcc or ld with "-s" used to create invalid executables.  The
  3091. bug in bfd that was responsible for this has been fixed.
  3092.  
  3093.    The conflict between String.h and string.h (and other such pairs of
  3094. header files) where you include one and get the other has been fixed.
  3095.  
  3096.    The top level install-sh script tries to install foo.exe if asked to
  3097. install foo when foo's not present.  This fixes many installs of Unix
  3098. software.
  3099.  
  3100.    Dlltool has preliminary support for the IMPORT declaration in .def
  3101. files when invoked with -I.  Feel free to experiment with it but once
  3102. this functionality is tested more extensively this flag may go away.
  3103.  
  3104.    Time is upgraded to version 1.7.
  3105.  
  3106.    Make is upgraded to version 3.75.
  3107.  
  3108.    Make accepts both Win32 and POSIX path lists in the VPATH variable.
  3109.  
  3110. Changes in the Cygwin32 API (cygwin.dll):
  3111. -----------------------------------------
  3112.  
  3113.    The following is now supported:
  3114.  
  3115.    * UNC paths * Reverse index escapes in console code * Blocking
  3116. select()s on a combination of sockets/handles * Directory symlinks.  *
  3117. Reparenting of child processes.
  3118.  
  3119.    The following calls have been added:
  3120.  
  3121.    * mmap(), mprotect(), msync(), munmap().  fork() changed to support
  3122. these.  * fsync(), statfs(), fstatfs().  * getprotobynumber() and
  3123. getservbyport().  * get_osfhandle(), cwait().  * spawnl(), spawnle(),
  3124. spawnlp(), spawnlpe(), spawnv(), spawnve(), spawnvp(), spawnvpe().  *
  3125. nice().  * sigpending(), sigsuspend() * Under NT only, chown(),
  3126. getgrgid(), getgrnam(), endgrent(), getgrent(), setpwend(), getpwent(),
  3127. endpwent().  Win95 still has these as stubs.
  3128.  
  3129.    Significantly better signals / exception handling support added.
  3130. The kill signal works much better now (control-C works in bash).
  3131.  
  3132.    Shell scripts now run the shell specified after the #! instead of
  3133. always defaulting to /bin/sh.
  3134.  
  3135.    Floating point registers are now properly initialized in the crt0.o.
  3136.  
  3137.    Opening non-disk files such as com ports no longer check to see if
  3138. they are symlinks or executables.
  3139.  
  3140.    The console title now is set to the name of the running process.
  3141.  
  3142.    Winsock is now initialized upon app startup.
  3143.  
  3144.    Moved reent_data from private address space to cygwin.dll.
  3145.  
  3146.    The system() call now invokes spawnvp() instead of fork()/exec().
  3147.  
  3148.    Support for NT extended attributes has been added but is disabled
  3149. for now because it slowed things down too much.  We want to use them to
  3150. remember info about symlink and executable status of files.
  3151.  
  3152.    Under NT only, utilities mkpasswd and mkgroup can generate a valid
  3153. /etc/passwd and /etc/group.
  3154.  
  3155.    Earlier releases stored mount points in the registry under "Cygnus
  3156. Support".  This changed to "Cygnus Solutions" starting with beta 18.
  3157. Either use a registry editor (regedit under NT) to rename the old entry
  3158. or just redo your mount points and the cygwin.dll will automatically
  3159. create the new one for you.
  3160.  
  3161.    Mount points can now be up to MAX_PATH in length instead of 30
  3162. characters.
  3163.  
  3164. Release Beta 17.1 (Dec 10 1996)
  3165. ===============================
  3166.  
  3167.    A patch has been applied to make Win 95 configure work again.
  3168.  
  3169.    ld has been changed to make "a.exe" be the default executable name.
  3170.  
  3171. Release Beta 17 (Dec 7 1996)
  3172. ============================
  3173.  
  3174.    It is now possible to rebuild the tools natively under x86 NT when
  3175. the full Cygnus Developers' Kit (CDK) and the User Tools are both
  3176. installed correctly.
  3177.  
  3178.    While the cygwin.dll underwent substantial changes, none of them
  3179. prevent you from using previously built applications  The new dll is
  3180. compatible with beta 16 to the best of our knowledge.  Beta 14-built
  3181. programs will continue to fail with the beta 17 dll - you will have to
  3182. relink them before they will work.
  3183.  
  3184.    The winsup files that make up the Cygwin32 API are now under the GNU
  3185. General Public License.  See the accompanying press release for more
  3186. information.
  3187.  
  3188. Changes in specific tools:
  3189. --------------------------
  3190.  
  3191.    Gcc now links by default against -lkernel32 and also against
  3192. -luser32 -lgdi32 -lcomdlg32 when mwindows is set.  Another major change
  3193. is that when creating an executable, gcc will now create foo.exe when
  3194. given a -o argument of foo.
  3195.  
  3196.    Dlltool has patches to make it better handle the -subsystem argument
  3197. that allows choosing console vs. GUI among other options.  ld has been
  3198. changed to have a much larger stack reserve size.  This is necessary
  3199. when rebuilding the toolchain natively under NT.
  3200.  
  3201.    The C++ headers can now be found given a correctly set
  3202. GCC_EXEC_PREFIX environment variable.
  3203.  
  3204.    New versions of fileutils and make are included.  Findutils has been
  3205. added.
  3206.  
  3207. Changes in the Cygwin32 API (cygwin.dll):
  3208. -----------------------------------------
  3209.  
  3210.    Scott Christley's headers and def files for the standard Win32 dlls
  3211. have been integrated.  Anything present only in the previous Cygnus
  3212. headers has been added in the appropriate places.  There are
  3213. placeholder files with the standard Win32 header names that pull in our
  3214. headers so programs that try to include specific headers should
  3215. continue to work.  Having more complete headers should make Win32
  3216. native programming easier.
  3217.  
  3218.    Select has been rewritten from scratch.  The new one can deal with
  3219. all sockets, handles and sockets always ready, all handles.  Handles
  3220. and sockets with timeout not implemented yet.  Select now does blocking
  3221. and doesn't spin cpu.
  3222.  
  3223.    File handling has been largely rewritten: The fhandler array has
  3224. been moved into local memory instead of shared memory.  This makes a
  3225. number of things behave better.  Lots of changes to support this.
  3226. There is now fairly complete ansi/vt100 console support.  Some new file
  3227. locking support has been added.  Arrow keys are now supported.
  3228.  
  3229.    Process handling much improved.
  3230.  
  3231.    Significant serious bugs in fork() fixed.
  3232.  
  3233.    The system() call now works.
  3234.  
  3235.    unlink() now chmods read-only files to writable before attempting to
  3236. delete a file.  This fixes the outstanding problem where rm can't
  3237. delete read-only files saying "out of queue slots" repeatedly.
  3238.  
  3239.    Text mode read has been rewritten.
  3240.  
  3241.    New syslog code allows logging to event log under NT, file under Win
  3242. 95.
  3243.  
  3244.    Symlinks are enabled.
  3245.  
  3246.    readv() and writev() have been written and exported.
  3247.  
  3248.    For MS compatibility, we now export functions in the dll as _funcname
  3249. in addition to funcname.  I would suggest not making use of this fact
  3250. unless you are building code that already accesses C library calls in
  3251. this way.
  3252.  
  3253.    Almost all of the source code is now in C++ files.
  3254.  
  3255. Release Beta 16 (Aug 30 1996)
  3256. =============================
  3257.  
  3258.    Path handling has been completely rewritten.  To refer to drive Q: in
  3259. bash, you can now refer to //q/.  Alternatively, type "mount Q: /q" to
  3260. have drive Q: show up as /q.
  3261.  
  3262.    We now pass the Plum Hall positive C conformance tests on the i386
  3263. under Windows 95 and NT 4.0b2.
  3264.  
  3265.    Fork was previously not accessible inside the dll.  This is no
  3266. longer the case which should allow us to add working system and popen
  3267. calls.
  3268.  
  3269.    getdomainname works (it used to just return "cygnus.com") by getting
  3270. information from registry.
  3271.  
  3272.    Fixed readdir bug that set errno improperly.  This fixed the problem
  3273. with diff not working across directories.
  3274.  
  3275.    Better error checking in signal functions.  Initialize winsock in
  3276. cygwin32_socket with checkinit call (fixes bug that required calling any
  3277. function that did this first).
  3278.  
  3279.    New functions: sigaddset, sigismember, sigfillset, sigemptyset.
  3280.  
  3281.    Removed extra underscores present in sysdef files.
  3282.  
  3283.    There is a now a major and a minor version number associated with
  3284. the cygwin.dll.  The major number changes only when incompatible changes
  3285. are made, the minor number changes when significant changes are made to
  3286. the dll that don't require relinking of old apps.
  3287.  
  3288.    Changed value of HZ in include/sys/param.h to correct value of 1000.
  3289. (Fixes bug people reported about "time sleep 5" returning 50).
  3290.  
  3291.    Assorted exception handling fixes for both i386 and ppc processors.
  3292.  
  3293.    Assorted time-related fixes required for Cygnus Kerberos work.  New
  3294. time functions: gmtime, corelocaltime
  3295.  
  3296.    Assorted spawn and fork fixes.
  3297.  
  3298.    Pseudo-Unix process handling added - new ps and kill commands added
  3299.  
  3300.    Control-Z's are now handled as a valid EOF token in files opened as
  3301. text.  lseek now always operates in binary mode.
  3302.  
  3303.    Select revamped.
  3304.  
  3305.    Various other changes.  For more detailed information, consult the
  3306. file in the source code winsup/ChangeLog.
  3307.  
  3308.    Preprocessor define scheme changed.  Apps should now use _WIN32
  3309. instead of __WIN32__ to check for access to Win32 API and __CYGWIN32__
  3310. to check for presence of the Cygwin32 environment.
  3311.  
  3312.    We are no longer including GNU findutils, GNU dbm, GNU bison, GNU
  3313. less, ncurses, ftp, finger, rcl, cvtres, or V.  This may or may not
  3314. change in the future.
  3315.  
  3316.    You must relink old apps you built with prior releases with the new
  3317. cygwin.dll.
  3318.  
  3319. Release Beta 14 (April 10 1996)
  3320. ===============================
  3321.  
  3322.    Some bugs have been fixed.  GDBM and m4 are in the release.  GCC now
  3323. uses the standard install directories for cc1 etc.
  3324.  
  3325.    A port of V to gnu-win32 is included.  You can now write graphics
  3326. applications which will run on Unix or Windows unchanged.  Some parts of
  3327. V work on the PPC too.
  3328.  
  3329.    If you call any programs from the standard DOS shell, then the DLL
  3330. will expand all the wildcards (glob) found in the arguments on the
  3331. command line.  So ls *.exe will do what you think it should, even if
  3332. you're not in bash.
  3333.  
  3334.    ncurses and less are included. The DLL's emulation of a vt100 isn't
  3335. complete, so ncurses doesn't do all that it should. Hence less is more
  3336. or less useless.  This can be fixed with a new DLL.  (If you want to use
  3337. something which uses curses, be sure to set your TERM and HOME
  3338. envirionment variables)
  3339.  
  3340.    If you leave out main, then the libraries will try and call WinMain
  3341. in the usual way.
  3342.  
  3343.    ^C works much better on Windows 95.  It's still not quite right, but
  3344. at least most times it quits what you're doing, and most times doesn't
  3345. crash your machine.
  3346.  
  3347.    You can start more than one concurrent bash session.
  3348.  
  3349.    Some networking support has been added.  Even though telnet.exe is
  3350. provided, I know that it doesn't work, so please don't send me bug
  3351. reports.
  3352.  
  3353.    You will have to relink your applications to go with the new DLL.
  3354.  
  3355.    The DLL is released in its own .zip file too, so you don't have to
  3356. download a load of other stuff if you dont want to.
  3357.  
  3358. Release Beta 13 (Feb 9 1996)
  3359. ============================
  3360.  
  3361.    Files are opened in binary mode, unless the registry is fiddled with.
  3362.  
  3363.    The `cat >foo <<EOF bug is fixed.
  3364.  
  3365.    The symlink cookie has changed, so old links wont work any more.
  3366.  
  3367.    Two resource tools are provided (untested).
  3368.  
  3369.    More windows header files are provided. WxWindows almost compiles.
  3370.  
  3371.    You can get to a raw floppy with `/dev/fd0 or `/dev/fd1.
  3372.  
  3373.    You can have two filenames with the same name and different case in
  3374. the same directory.
  3375.  
  3376.    Stat now fills in the st_nlink field for directories, so find works
  3377. better.
  3378.  
  3379.    This version is much more stable than any previous version, and will
  3380. stay running long enough to configure and build itself on my NT box.
  3381.  
  3382.    This version is also available in PowerPC versions.  The PowerPC
  3383. compiler doesn't do stack probing, so some applications won't work, or
  3384. they'll only work on some input data - e.g. the demo "hello world" will
  3385. compile, but gcc will crash compiling the dhrystone benchmark.
  3386.  
  3387.    There's a new registry variable "fmode=binary" which controls
  3388. whether the tools always open files in binary mode (unless overridden
  3389. with O_TEXT), or always open files in text mode (unless overridden with
  3390. O_BINARY).
  3391.  
  3392.    Filesystems can be mounted with the mixed_case flag.  This allows
  3393. you to use filenames with the same spelling, but different case in the
  3394. same directory.
  3395.  
  3396.    I haven't tested or even used some of the packages that I've
  3397. provided.  I compiled them, and then fixed the obvious "the file should
  3398. have been opened in binary mode" problems.
  3399.  
  3400.    I've already had reports of some of it not working correctly on
  3401. Windows 95.  I don't have a simple to use Windows 95 configuration, but
  3402. when I did try "it worked for me".  This may be another manifestation
  3403. of the bug which makes bash hang sometimes under NT.
  3404.  
  3405. Release Beta 12 (Jan 3 1996)
  3406. ============================
  3407.  
  3408.    You can call non- gnu-win32 applications from bash.
  3409.  
  3410.    You can mount other directories using the `mount' command.
  3411.  
  3412.    Minimal ANSI terminal emulation included.
  3413.  
  3414.    Packages split into smaller and more logical lumps.
  3415.  
  3416.    /d<name> mechanism gone.
  3417.  
  3418.    Initial support for the PowerPC added.
  3419.  
  3420. Release Beta 11 (Jan 3 1996)
  3421. ============================
  3422.  
  3423.    Something broke on the way to the ftp site.
  3424.  
  3425. Release Beta 10 (Dec 5 1995)
  3426. ============================
  3427.  
  3428.    You can pass environment variables around in bash.
  3429.  
  3430.    Lots more stuff provided precompiled.
  3431.  
  3432.    Diffs to standard FSF release provided.
  3433.  
  3434.    It self-hosts.
  3435.  
  3436.    It supports symbolic links.
  3437.  
  3438.    The directory layout has changed to be more unix like.
  3439.  
  3440.    The way that you get to non-c drives is new - i:\foo.cc is now
  3441. /di/foo.cc
  3442.  
  3443.    Nasty bug found and fixed in fork.
  3444.  
  3445.    CPP will now search the directories you supply in env names.
  3446.  
  3447. Release Beta 9
  3448. ==============
  3449.  
  3450.    I've put all of libc and libm into a shared library, This
  3451. drastically reduces the size of some binaries.  e.g., ls goes from
  3452. 82,949 bytes to 26,624.  "Hello World" is 2564 bytes long.  This is the
  3453. first stage in greatly speeding up some of the stuff that's going on
  3454. behind the curtain.
  3455.  
  3456.    Different processes communicate using shared memory.
  3457.  
  3458.    Some trivial use of the registry is made.
  3459.  
  3460.    DLLTOOL is now *much* faster.
  3461.  
  3462.    Some small problems have been fixed in the way that DLLs were layed
  3463. out.
  3464.  
  3465. Release Beta 8
  3466. ==============
  3467.  
  3468.    GDB works.
  3469.  
  3470.    GCC now emits debug info which can make **huge** executables
  3471. Fortunately, strip works too.
  3472.  
  3473.    More work has been done to make quoting work.
  3474.  
  3475.    Simple termios support added to newlib.
  3476.  
  3477.    Much nicer way of describing paths, eg //c/foo is c:\foo.
  3478.  
  3479. Release Beta 7
  3480. ==============
  3481.  
  3482.    Works again on Win 95 (which is why -6 wasn't advertised).
  3483.  
  3484.    Permissions are faked better.
  3485.  
  3486.    Source of demos available without having to ftp the entire win32
  3487. binary tree.
  3488.  
  3489. Release Beta 6
  3490. ==============
  3491.  
  3492.    Can now generate DLLs, tiny demo included.  tcl, byacc, fileutils,
  3493. diff, make included.
  3494.  
  3495. Release Beta 5
  3496. ==============
  3497.  
  3498.    Bug preventing anything from running on recent versions of Win95
  3499. fixed.
  3500.  
  3501.    vfork and exec oddities fixed.
  3502.  
  3503.    Import libraries are now really libraries and not just .o files.
  3504.  
  3505.    Debugging info stripped from images and libraries; it's just bloat
  3506. until gdb works.
  3507.  
  3508.    I've filled in the four major import libraries.
  3509.  
  3510.    The win*.h files are now installed into <foo>/include rather that
  3511. <foo>/include/sys, so more things will compile out of the box.
  3512.  
  3513. Release Beta 4
  3514. ==============
  3515.  
  3516.    PE support is fixed. Programs run on NT 3.1, NT 3.5, NT 3.51 and
  3517. Windows 95.
  3518.  
  3519.    You can build GUI programs.
  3520.  
  3521.    .DEF files for three other DLL's started.
  3522.  
  3523.    New GUI demo program.
  3524.  
  3525.    C library distinguishes between text and binary files consequently
  3526. the text files generated by the tools have the familiar ^M at the end
  3527. of the line which DOS likes so much.
  3528.  
  3529.    Doug Evans of Cygnus has added a load of fancy support for execve,
  3530. opendir and various other cool things.
  3531.  
  3532.    Exception handling is better.
  3533.  
  3534. Release Beta 3
  3535. ==============
  3536.  
  3537.    Was so long ago we don't remember.
  3538.  
  3539. Who's behind the project?
  3540. *************************
  3541.  
  3542.    I'm Geoffrey Noer (noer@cygnus.com).  I've had Cygwin on the brain
  3543. since mid-1996 when I became responsible for the project.  As Cygwin
  3544. maintainer, I produced the Net releases from beta 16 until present, made
  3545. the development snapshots, worked with Net contributors to fix bugs,
  3546. fixed some myself, etc...  Thanks to the success of Cygwin and the
  3547. increasing importance of Windows, I now share the responsibility for
  3548. Cygwin with Chris Faylor and DJ Delorie under our manager, Eric Bachalo.
  3549.  
  3550.    Chris Faylor (cgf@cygnus.com) is behind many of the recent changes in
  3551. Cygwin.  Prior to joining Cygnus, he contributed significant fixes to
  3552. the process control and environ code, reworked the strace mechanism, and
  3553. rewrote the signal-related code from scratch as a Net contributor.
  3554.  
  3555.    DJ Delorie (dj@cygnus.com) has recently joined Cygnus and has been
  3556. making himself useful since day one.  He did some profiling of Cygwin,
  3557. worked on the Dejagnu automated testing framework and ld/dlltool, wrote
  3558. a good deal of the Cygwin Users' Guide, and authored the cygcheck
  3559. utility.
  3560.  
  3561.    Please note that those of us here at Cygnus that work on Cygwin try
  3562. to be as responsive as possible and deal with patches and questions as I
  3563. get them, but realistically we don't have time to answer all of the
  3564. email that is sent to the main mailing list.  Making Net releases of the
  3565. Win32 tools and helping people on the Net out is not our primary job
  3566. function, so some email will have to go unanswered.
  3567.  
  3568.    Sergey Okhapkin (sos@prospect.com.ru) has been an invaluable Net
  3569. contributor.  He implemented the tty/pty support, has played a
  3570. significant role in revamping signal and exception handling, and has
  3571. made countless contributions throughout the library.  He also provided
  3572. binaries of the development snapshots to the Net after the beta 19
  3573. release.
  3574.  
  3575.    Mumit Khan (khan@xraylith.wisc.edu) has been most helpful on the EGCS
  3576. end of things, providing quite a large number of stabilizing patches to
  3577. the compiler tools for the B20 release.
  3578.  
  3579.    Corinna Vinschen (corinna.vinschen@cityweb.de) has contributed
  3580. several useful fixes to the path handling code, console support, and
  3581. raw device support.
  3582.  
  3583.    Philippe Giacinti (giac@dalim.de) contributed the implementation of
  3584. dlopen, dlclose, dlsym, dlfork, and dlerror in Cygwin.
  3585.  
  3586.    Steve Chamberlain (sac@transmeta.com) wrote the original
  3587. implementation of Cygwin when he worked for Cygnus.  He also produced
  3588. all of the releases up to beta 14.
  3589.  
  3590.    Many other people at Cygnus have made important contributions to
  3591. Cygwin.  Tobin Brockett wrote the InstallShield-based installer for the
  3592. beta 19 and 20 releases.  Ian Lance Taylor did a much-needed rework of
  3593. the path handling code for beta 18, and has made many assorted fixes
  3594. throughout the code.  Jeremy Allison made significant contributions in
  3595. the area of file handling and process control, and rewrote select from
  3596. scratch.  Doug Evans rewrote the path-handling code in beta 16, among
  3597. other things.  Kim Knuttila and Michael Meissner put in many long hours
  3598. working on the now-defunct PowerPC port.  Jason Molenda and Mark Eichin
  3599. have also made important contributions.
  3600.  
  3601.    Also many thanks to everyone using the tools for their many
  3602. contributions in the form of advice, bug reports, and code fixes.  Keep
  3603. them coming!
  3604.  
  3605. What are the copyrights ?
  3606. *************************
  3607.  
  3608. The general idea
  3609. ================
  3610.  
  3611.    Most of the tools are covered by the GNU General Public License
  3612. (GPL), although some are public domain, and others have a Berkeley-style
  3613. copyright.  To cover the GNU GPL `restrictions', the basic rule is if
  3614. you give out any binaries, you must also make the source available.
  3615. For the full details, be sure to read the text of the GNU GPL which
  3616. follows.
  3617.  
  3618.    The Cygwin API library found in the winsup subdirectory of the
  3619. source code is also covered by the GNU GPL.  By default, all
  3620. executables link against this library (and in the process include GPL'd
  3621. Cygwin glue code).  This means that unless you modify the tools so that
  3622. compiled executables do not make use of the Cygwin library, your
  3623. compiled programs will also have to be free software distributed under
  3624. the GPL with source code available to all.
  3625.  
  3626.    Cygwin is currently available for commercial use as part of the
  3627. Cygnus GNUPro Toolkit.  Customers who purchase the GNUPro Toolkit with
  3628. Mission Critical Support for a development team of five or more users
  3629. get a commercial version of the Cygwin library.  The price for five
  3630. users is $7495, which includes the GNUPro Toolkit, Mission Critical
  3631. Support for one year, and a commercially licensed version of the Cygwin
  3632. library.  Please contact info@cygnus.com for more information.
  3633.  
  3634. GNU GENERAL PUBLIC LICENSE
  3635. ==========================
  3636.  
  3637.                 GNU GENERAL PUBLIC LICENSE
  3638.                    Version 2, June 1991
  3639.      
  3640.       Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  3641.                                675 Mass Ave, Cambridge, MA 02139, USA
  3642.       Everyone is permitted to copy and distribute verbatim copies
  3643.       of this license document, but changing it is not allowed.
  3644.      
  3645.                      Preamble
  3646.      
  3647.        The licenses for most software are designed to take away your
  3648.      freedom to share and change it.  By contrast, the GNU General Public
  3649.      License is intended to guarantee your freedom to share and change free
  3650.      software--to make sure the software is free for all its users.  This
  3651.      General Public License applies to most of the Free Software
  3652.      Foundation's software and to any other program whose authors commit to
  3653.      using it.  (Some other Free Software Foundation software is covered by
  3654.      the GNU Library General Public License instead.)  You can apply it to
  3655.      your programs, too.
  3656.      
  3657.        When we speak of free software, we are referring to freedom, not
  3658.      price.  Our General Public Licenses are designed to make sure that you
  3659.      have the freedom to distribute copies of free software (and charge for
  3660.      this service if you wish), that you receive source code or can get it
  3661.      if you want it, that you can change the software or use pieces of it
  3662.      in new free programs; and that you know you can do these things.
  3663.      
  3664.        To protect your rights, we need to make restrictions that forbid
  3665.      anyone to deny you these rights or to ask you to surrender the rights.
  3666.      These restrictions translate to certain responsibilities for you if you
  3667.      distribute copies of the software, or if you modify it.
  3668.      
  3669.        For example, if you distribute copies of such a program, whether
  3670.      gratis or for a fee, you must give the recipients all the rights that
  3671.      you have.  You must make sure that they, too, receive or can get the
  3672.      source code.  And you must show them these terms so they know their
  3673.      rights.
  3674.      
  3675.        We protect your rights with two steps: (1) copyright the software, and
  3676.      (2) offer you this license which gives you legal permission to copy,
  3677.      distribute and/or modify the software.
  3678.      
  3679.        Also, for each author's protection and ours, we want to make certain
  3680.      that everyone understands that there is no warranty for this free
  3681.      software.  If the software is modified by someone else and passed on, we
  3682.      want its recipients to know that what they have is not the original, so
  3683.      that any problems introduced by others will not reflect on the original
  3684.      authors' reputations.
  3685.      
  3686.        Finally, any free program is threatened constantly by software
  3687.      patents.  We wish to avoid the danger that redistributors of a free
  3688.      program will individually obtain patent licenses, in effect making the
  3689.      program proprietary.  To prevent this, we have made it clear that any
  3690.      patent must be licensed for everyone's free use or not licensed at all.
  3691.      
  3692.        The precise terms and conditions for copying, distribution and
  3693.      modification follow.
  3694.      
  3695.                  GNU GENERAL PUBLIC LICENSE
  3696.         TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  3697.      
  3698.        0. This License applies to any program or other work which contains
  3699.      a notice placed by the copyright holder saying it may be distributed
  3700.      under the terms of this General Public License.  The "Program", below,
  3701.      refers to any such program or work, and a "work based on the Program"
  3702.      means either the Program or any derivative work under copyright law:
  3703.      that is to say, a work containing the Program or a portion of it,
  3704.      either verbatim or with modifications and/or translated into another
  3705.      language.  (Hereinafter, translation is included without limitation in
  3706.      the term "modification".)  Each licensee is addressed as "you".
  3707.      
  3708.      Activities other than copying, distribution and modification are not
  3709.      covered by this License; they are outside its scope.  The act of
  3710.      running the Program is not restricted, and the output from the Program
  3711.      is covered only if its contents constitute a work based on the
  3712.      Program (independent of having been made by running the Program).
  3713.      Whether that is true depends on what the Program does.
  3714.      
  3715.        1. You may copy and distribute verbatim copies of the Program's
  3716.      source code as you receive it, in any medium, provided that you
  3717.      conspicuously and appropriately publish on each copy an appropriate
  3718.      copyright notice and disclaimer of warranty; keep intact all the
  3719.      notices that refer to this License and to the absence of any warranty;
  3720.      and give any other recipients of the Program a copy of this License
  3721.      along with the Program.
  3722.      
  3723.      You may charge a fee for the physical act of transferring a copy, and
  3724.      you may at your option offer warranty protection in exchange for a fee.
  3725.      
  3726.        2. You may modify your copy or copies of the Program or any portion
  3727.      of it, thus forming a work based on the Program, and copy and
  3728.      distribute such modifications or work under the terms of Section 1
  3729.      above, provided that you also meet all of these conditions:
  3730.      
  3731.          a) You must cause the modified files to carry prominent notices
  3732.          stating that you changed the files and the date of any change.
  3733.      
  3734.          b) You must cause any work that you distribute or publish, that in
  3735.          whole or in part contains or is derived from the Program or any
  3736.          part thereof, to be licensed as a whole at no charge to all third
  3737.          parties under the terms of this License.
  3738.      
  3739.          c) If the modified program normally reads commands interactively
  3740.          when run, you must cause it, when started running for such
  3741.          interactive use in the most ordinary way, to print or display an
  3742.          announcement including an appropriate copyright notice and a
  3743.          notice that there is no warranty (or else, saying that you provide
  3744.          a warranty) and that users may redistribute the program under
  3745.          these conditions, and telling the user how to view a copy of this
  3746.          License.  (Exception: if the Program itself is interactive but
  3747.          does not normally print such an announcement, your work based on
  3748.          the Program is not required to print an announcement.)
  3749.      
  3750.      These requirements apply to the modified work as a whole.  If
  3751.      identifiable sections of that work are not derived from the Program,
  3752.      and can be reasonably considered independent and separate works in
  3753.      themselves, then this License, and its terms, do not apply to those
  3754.      sections when you distribute them as separate works.  But when you
  3755.      distribute the same sections as part of a whole which is a work based
  3756.      on the Program, the distribution of the whole must be on the terms of
  3757.      this License, whose permissions for other licensees extend to the
  3758.      entire whole, and thus to each and every part regardless of who wrote it.
  3759.      
  3760.      Thus, it is not the intent of this section to claim rights or contest
  3761.      your rights to work written entirely by you; rather, the intent is to
  3762.      exercise the right to control the distribution of derivative or
  3763.      collective works based on the Program.
  3764.      
  3765.      In addition, mere aggregation of another work not based on the Program
  3766.      with the Program (or with a work based on the Program) on a volume of
  3767.      a storage or distribution medium does not bring the other work under
  3768.      the scope of this License.
  3769.      
  3770.        3. You may copy and distribute the Program (or a work based on it,
  3771.      under Section 2) in object code or executable form under the terms of
  3772.      Sections 1 and 2 above provided that you also do one of the following:
  3773.      
  3774.          a) Accompany it with the complete corresponding machine-readable
  3775.          source code, which must be distributed under the terms of Sections
  3776.          1 and 2 above on a medium customarily used for software interchange; or,
  3777.      
  3778.          b) Accompany it with a written offer, valid for at least three
  3779.          years, to give any third party, for a charge no more than your
  3780.          cost of physically performing source distribution, a complete
  3781.          machine-readable copy of the corresponding source code, to be
  3782.          distributed under the terms of Sections 1 and 2 above on a medium
  3783.          customarily used for software interchange; or,
  3784.      
  3785.          c) Accompany it with the information you received as to the offer
  3786.          to distribute corresponding source code.  (This alternative is
  3787.          allowed only for noncommercial distribution and only if you
  3788.          received the program in object code or executable form with such
  3789.          an offer, in accord with Subsection b above.)
  3790.      
  3791.      The source code for a work means the preferred form of the work for
  3792.      making modifications to it.  For an executable work, complete source
  3793.      code means all the source code for all modules it contains, plus any
  3794.      associated interface definition files, plus the scripts used to
  3795.      control compilation and installation of the executable.  However, as a
  3796.      special exception, the source code distributed need not include
  3797.      anything that is normally distributed (in either source or binary
  3798.      form) with the major components (compiler, kernel, and so on) of the
  3799.      operating system on which the executable runs, unless that component
  3800.      itself accompanies the executable.
  3801.      
  3802.      If distribution of executable or object code is made by offering
  3803.      access to copy from a designated place, then offering equivalent
  3804.      access to copy the source code from the same place counts as
  3805.      distribution of the source code, even though third parties are not
  3806.      compelled to copy the source along with the object code.
  3807.      
  3808.        4. You may not copy, modify, sublicense, or distribute the Program
  3809.      except as expressly provided under this License.  Any attempt
  3810.      otherwise to copy, modify, sublicense or distribute the Program is
  3811.      void, and will automatically terminate your rights under this License.
  3812.      However, parties who have received copies, or rights, from you under
  3813.      this License will not have their licenses terminated so long as such
  3814.      parties remain in full compliance.
  3815.      
  3816.        5. You are not required to accept this License, since you have not
  3817.      signed it.  However, nothing else grants you permission to modify or
  3818.      distribute the Program or its derivative works.  These actions are
  3819.      prohibited by law if you do not accept this License.  Therefore, by
  3820.      modifying or distributing the Program (or any work based on the
  3821.      Program), you indicate your acceptance of this License to do so, and
  3822.      all its terms and conditions for copying, distributing or modifying
  3823.      the Program or works based on it.
  3824.      
  3825.        6. Each time you redistribute the Program (or any work based on the
  3826.      Program), the recipient automatically receives a license from the
  3827.      original licensor to copy, distribute or modify the Program subject to
  3828.      these terms and conditions.  You may not impose any further
  3829.      restrictions on the recipients' exercise of the rights granted herein.
  3830.      You are not responsible for enforcing compliance by third parties to
  3831.      this License.
  3832.      
  3833.        7. If, as a consequence of a court judgment or allegation of patent
  3834.      infringement or for any other reason (not limited to patent issues),
  3835.      conditions are imposed on you (whether by court order, agreement or
  3836.      otherwise) that contradict the conditions of this License, they do not
  3837.      excuse you from the conditions of this License.  If you cannot
  3838.      distribute so as to satisfy simultaneously your obligations under this
  3839.      License and any other pertinent obligations, then as a consequence you
  3840.      may not distribute the Program at all.  For example, if a patent
  3841.      license would not permit royalty-free redistribution of the Program by
  3842.      all those who receive copies directly or indirectly through you, then
  3843.      the only way you could satisfy both it and this License would be to
  3844.      refrain entirely from distribution of the Program.
  3845.      
  3846.      If any portion of this section is held invalid or unenforceable under
  3847.      any particular circumstance, the balance of the section is intended to
  3848.      apply and the section as a whole is intended to apply in other
  3849.      circumstances.
  3850.      
  3851.      It is not the purpose of this section to induce you to infringe any
  3852.      patents or other property right claims or to contest validity of any
  3853.      such claims; this section has the sole purpose of protecting the
  3854.      integrity of the free software distribution system, which is
  3855.      implemented by public license practices.  Many people have made
  3856.      generous contributions to the wide range of software distributed
  3857.      through that system in reliance on consistent application of that
  3858.      system; it is up to the author/donor to decide if he or she is willing
  3859.      to distribute software through any other system and a licensee cannot
  3860.      impose that choice.
  3861.      
  3862.      This section is intended to make thoroughly clear what is believed to
  3863.      be a consequence of the rest of this License.
  3864.      
  3865.        8. If the distribution and/or use of the Program is restricted in
  3866.      certain countries either by patents or by copyrighted interfaces, the
  3867.      original copyright holder who places the Program under this License
  3868.      may add an explicit geographical distribution limitation excluding
  3869.      those countries, so that distribution is permitted only in or among
  3870.      countries not thus excluded.  In such case, this License incorporates
  3871.      the limitation as if written in the body of this License.
  3872.      
  3873.        9. The Free Software Foundation may publish revised and/or new versions
  3874.      of the General Public License from time to time.  Such new versions will
  3875.      be similar in spirit to the present version, but may differ in detail to
  3876.      address new problems or concerns.
  3877.      
  3878.      Each version is given a distinguishing version number.  If the Program
  3879.      specifies a version number of this License which applies to it and "any
  3880.      later version", you have the option of following the terms and conditions
  3881.      either of that version or of any later version published by the Free
  3882.      Software Foundation.  If the Program does not specify a version number of
  3883.      this License, you may choose any version ever published by the Free Software
  3884.      Foundation.
  3885.      
  3886.        10. If you wish to incorporate parts of the Program into other free
  3887.      programs whose distribution conditions are different, write to the author
  3888.      to ask for permission.  For software which is copyrighted by the Free
  3889.      Software Foundation, write to the Free Software Foundation; we sometimes
  3890.      make exceptions for this.  Our decision will be guided by the two goals
  3891.      of preserving the free status of all derivatives of our free software and
  3892.      of promoting the sharing and reuse of software generally.
  3893.      
  3894.                      NO WARRANTY
  3895.      
  3896.        11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  3897.      FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  3898.      OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  3899.      PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  3900.      OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  3901.      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  3902.      TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  3903.      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  3904.      REPAIR OR CORRECTION.
  3905.      
  3906.        12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  3907.      WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  3908.      REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  3909.      INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  3910.      OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  3911.      TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  3912.      YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  3913.      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  3914.      POSSIBILITY OF SUCH DAMAGES.
  3915.      
  3916.                   END OF TERMS AND CONDITIONS
  3917.      
  3918.          Appendix: How to Apply These Terms to Your New Programs
  3919.      
  3920.        If you develop a new program, and you want it to be of the greatest
  3921.      possible use to the public, the best way to achieve this is to make it
  3922.      free software which everyone can redistribute and change under these terms.
  3923.      
  3924.        To do so, attach the following notices to the program.  It is safest
  3925.      to attach them to the start of each source file to most effectively
  3926.      convey the exclusion of warranty; and each file should have at least
  3927.      the "copyright" line and a pointer to where the full notice is found.
  3928.      
  3929.          <one line to give the program's name and a brief idea of what it does.>
  3930.          Copyright (C) 19yy  <name of author>
  3931.      
  3932.          This program is free software; you can redistribute it and/or modify
  3933.          it under the terms of the GNU General Public License as published by
  3934.          the Free Software Foundation; either version 2 of the License, or
  3935.          (at your option) any later version.
  3936.      
  3937.          This program is distributed in the hope that it will be useful,
  3938.          but WITHOUT ANY WARRANTY; without even the implied warranty of
  3939.          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  3940.          GNU General Public License for more details.
  3941.      
  3942.          You should have received a copy of the GNU General Public License
  3943.          along with this program; if not, write to the Free Software
  3944.          Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  3945.      
  3946.      Also add information on how to contact you by electronic and paper mail.
  3947.      
  3948.      If the program is interactive, make it output a short notice like this
  3949.      when it starts in an interactive mode:
  3950.      
  3951.          Gnomovision version 69, Copyright (C) 19yy name of author
  3952.          Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
  3953.          This is free software, and you are welcome to redistribute it
  3954.          under certain conditions; type `show c' for details.
  3955.      
  3956.      The hypothetical commands `show w' and `show c' should show the appropriate
  3957.      parts of the General Public License.  Of course, the commands you use may
  3958.      be called something other than `show w' and `show c'; they could even be
  3959.      mouse-clicks or menu items--whatever suits your program.
  3960.      
  3961.      You should also get your employer (if you work as a programmer) or your
  3962.      school, if any, to sign a "copyright disclaimer" for the program, if
  3963.      necessary.  Here is a sample; alter the names:
  3964.      
  3965.        Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  3966.        `Gnomovision' (which makes passes at compilers) written by James Hacker.
  3967.      
  3968.        <signature of Ty Coon>, 1 April 1989
  3969.        Ty Coon, President of Vice
  3970.      
  3971.      This General Public License does not permit incorporating your program into
  3972.      proprietary programs.  If your program is a subroutine library, you may
  3973.      consider it more useful to permit linking proprietary applications with the
  3974.      library.  If this is what you want to do, use the GNU Library General
  3975.      Public License instead of this License.
  3976.  
  3977.